[android-developers] Re: How to get a remote logcat on error?

2010-02-03 Thread Martin
Or is there another possibility to debug my game, while it is in the
market?
How can I intercept all the errors in my code to find out how I can
solve them?

If nobody has an answer to this, I have to put a
try {
...
} catch (Exception e) { /* send this exception and line number over
internet to me */ }
on EVERY line of code?

For example:


@Override
public void onCreate(Bundle savedInstanceState) {

try {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
Global.screen_width = dm.widthPixels;
Global.screen_height = dm.heightPixels;
Global.screen_width_factor = 320/Global.screen_width;
Global.screen_height_factor = 480/Global.screen_height;
} catch (Exception e) { /* send exception - METRICS */ }
try {

super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags
(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN );
} catch (Exception e) { /* send exception - window */ }
try {


setContentView(R.layout.main);
} catch (Exception e) { /* send exception - contentview */ }
try {

//Sound starten
SharedPreferences prefs = getSharedPreferences(options, 0);
Global.bgmusic=prefs.getBoolean(music, true);
Global.soundeffects=prefs.getBoolean(soundeffects, true);
} catch (Exception e) { /* send exception - start sound */ }
try {


b_start = (Button) findViewById(R.id.b_start);
b_start.layout(120*Global.screen_width_factor,
55*Global.screen_height_factor,
(120+buttonwidth)*Global.screen_width_factor, 
(55+buttonheight)*
} catch (Exception e) { /* send exception - startbuttoncreated */ }


and so on

or is there a better solution?

Greetings, Martin



On 3 Feb., 10:11, Martin google-gro...@digle.de wrote:
 Hi!

 I have a game in the market and with flurry analytics, I receive all
 my errors. Here are some of them:

  01/31/10 01:47:39 PM PST        0       class
 java.lang.IllegalArgumentException       parameter must be a descendant of
 this view
  02/02/10 12:40:41 PM PST        0       class
 java.lang.IllegalThreadStateException    Thread already started.
  01/26/10 09:25:36 PM PST        0       class java.lang.NullPointerException
                  1.0 (beta)      uncaught                Android
  02/01/10 05:26:27 PM PST        0       class java.lang.OutOfMemoryError
 bitmap size exceeds VM budget    1.3 (beta)      uncaught                
 Android
  01/29/10 10:23:10 AM PST        0       class java.lang.RuntimeException
 Adding window failed     1.0 (beta)      uncaught                Android
  01/29/10 08:19:05 AM PST        0       class java.lang.RuntimeException
 Unable to start activity ComponentInfo{digle.de.LeonardFrog/
 digle.de.LeonardFrog.AHighscore}: java.lang.NullPointerException         1.0
 (beta)   uncaught                Android
  01/27/10 01:09:35 AM PST        0       class java.lang.VerifyError
 digle.de.LeonardFrog.AHighscore          1.0 (beta)      uncaught             
    Android

 I want to solve them but I need a logcat. There is the application
 aLogcat in the Market, which displays the logcat on the mobile, but
 I need the logcat of my users without telling them to download this
 app, because many people are lazy and won't do it. How can I get this
 logcat? Is there maybe a library, which sends me the logcat on error?

 Greetings, Martin

-- 
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


[android-developers] Re: How to get a remote logcat on error?

2010-02-03 Thread Streets Of Boston
This is not necessary, to catch every line of code.

Register an uncaught-exception-handler
(Thread.setDefaultUncaughtExceptionHandler). Before you set it, get
the current one. You may need to call it from your own uncaught-
exception-handler.

In this handler, print out the stack-trace (and some other info such
as OS-version, phone model, make, etc) to a file (on phone-memory or
sd-card)

These above steps are the bare basics.

In my app, I added a Service and an Activity, both running in a
different process than my app whose stack-traces i'm logging. If they
would run in the same process, it woudn't work (calling a Service and
Activity from a dying process).

The uncaught-exception-handling code binds to the Service
(initialization) and upon a stack-trace dump, after having generated
the file, it does a Service-request:

The Service starts the Activity that just shows a dialog asking the
using to submit an error report or not. If the user answers 'Yes',
then the Activity will read the file with the stack-trace info and
send it to a web-server (Http). The web-server gets this request,
generates an e-mail from it that is then sent to my inbox.

When the uncaught-exception-handler calls the service, it just kills
and extis the process. If the handler could not bind to the Service or
the Service-request failed, it calls the original default uncaught-
exception-handler that then shows the common 'Force Close' dialog.

This has been working well for me and found a few bugs here and
there :)

On Feb 3, 5:24 am, Martin google-gro...@digle.de wrote:
 Or is there another possibility to debug my game, while it is in the
 market?
 How can I intercept all the errors in my code to find out how I can
 solve them?

 If nobody has an answer to this, I have to put a
 try {
 ...} catch (Exception e) { /* send this exception and line number over

 internet to me */ }
 on EVERY line of code?

 For example:

         @Override
         public void onCreate(Bundle savedInstanceState) {

 try {
                 DisplayMetrics dm = new DisplayMetrics();
                 getWindowManager().getDefaultDisplay().getMetrics(dm);
                 Global.screen_width = dm.widthPixels;
                 Global.screen_height = dm.heightPixels;
                 Global.screen_width_factor = 320/Global.screen_width;
                 Global.screen_height_factor = 480/Global.screen_height;} 
 catch (Exception e) { /* send exception - METRICS */ }

 try {

                 super.onCreate(savedInstanceState);
                 requestWindowFeature(Window.FEATURE_NO_TITLE);
                 this.getWindow().setFlags
 (WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                 WindowManager.LayoutParams.FLAG_FULLSCREEN 
 );} catch (Exception e) { /* send exception - window */ }

 try {

                 setContentView(R.layout.main);} catch (Exception e) { /* send 
 exception - contentview */ }

 try {

                 //Sound starten
                 SharedPreferences prefs = getSharedPreferences(options, 0);
                 Global.bgmusic=prefs.getBoolean(music, true);
                 Global.soundeffects=prefs.getBoolean(soundeffects, true);} 
 catch (Exception e) { /* send exception - start sound */ }

 try {

                 b_start = (Button) findViewById(R.id.b_start);
                 b_start.layout(120*Global.screen_width_factor,
 55*Global.screen_height_factor,
                                 (120+buttonwidth)*Global.screen_width_factor, 
 (55+buttonheight)*

 } catch (Exception e) { /* send exception - startbuttoncreated */ }

 and so on

 or is there a better solution?

 Greetings, Martin

 On 3 Feb., 10:11, Martin google-gro...@digle.de wrote:



  Hi!

  I have a game in the market and with flurry analytics, I receive all
  my errors. Here are some of them:

   01/31/10 01:47:39 PM PST        0       class
  java.lang.IllegalArgumentException       parameter must be a descendant of
  this view
   02/02/10 12:40:41 PM PST        0       class
  java.lang.IllegalThreadStateException    Thread already started.
   01/26/10 09:25:36 PM PST        0       class 
  java.lang.NullPointerException
                   1.0 (beta)      uncaught                Android
   02/01/10 05:26:27 PM PST        0       class java.lang.OutOfMemoryError
  bitmap size exceeds VM budget    1.3 (beta)      uncaught                
  Android
   01/29/10 10:23:10 AM PST        0       class java.lang.RuntimeException
  Adding window failed     1.0 (beta)      uncaught                Android
   01/29/10 08:19:05 AM PST        0       class java.lang.RuntimeException
  Unable to start activity ComponentInfo{digle.de.LeonardFrog/
  digle.de.LeonardFrog.AHighscore}: java.lang.NullPointerException         1.0
  (beta)   uncaught                Android
   01/27/10 01:09:35 AM PST        0       class java.lang.VerifyError
  digle.de.LeonardFrog.AHighscore          1.0 (beta)      uncaught           
       Android

  I want to solve them but I 

[android-developers] Re: How to get a remote logcat on error?

2010-02-03 Thread Emmanuel
Note that I made a blog entry to explain how I made a crash reporter
using email on my blog, there :
http://androidblogger.blogspot.com/2009/12/how-to-improve-your-application-crash.html

It's a very effective way to catch the bugs, and to find how they
happen.

The fact that it is send by mail ( so the user should accept to send
it ) makes it really easy to do, you don't need to have a web site to
handle them, but most of the users won't send it. In my view, if
nobody sent me an crash report, I take it for granted there is no
common bug. If a bug is really common and happens often, it will be
sent !

Hope it helps,

Emmanuel

Ps : By the way, I don't fully understand why Flurry doesn't provide
the full call stack. They are so close, and they have done most of the
work to have a super useful tool, and they just stop one inch before
it... Strange... ( but it makes me feel good to have develop my own
crash reporter )

On Feb 3, 5:40 pm, Streets Of Boston flyingdutc...@gmail.com wrote:
 This is not necessary, to catch every line of code.

 Register an uncaught-exception-handler
 (Thread.setDefaultUncaughtExceptionHandler). Before you set it, get
 the current one. You may need to call it from your own uncaught-
 exception-handler.

 In this handler, print out the stack-trace (and some other info such
 as OS-version, phone model, make, etc) to a file (on phone-memory or
 sd-card)

 These above steps are the bare basics.

 In my app, I added a Service and an Activity, both running in a
 different process than my app whose stack-traces i'm logging. If they
 would run in the same process, it woudn't work (calling a Service and
 Activity from a dying process).

 The uncaught-exception-handling code binds to the Service
 (initialization) and upon a stack-trace dump, after having generated
 the file, it does a Service-request:

 The Service starts the Activity that just shows a dialog asking the
 using to submit an error report or not. If the user answers 'Yes',
 then the Activity will read the file with the stack-trace info and
 send it to a web-server (Http). The web-server gets this request,
 generates an e-mail from it that is then sent to my inbox.

 When the uncaught-exception-handler calls the service, it just kills
 and extis the process. If the handler could not bind to the Service or
 the Service-request failed, it calls the original default uncaught-
 exception-handler that then shows the common 'Force Close' dialog.

 This has been working well for me and found a few bugs here and
 there :)

 On Feb 3, 5:24 am, Martin google-gro...@digle.de wrote:



  Or is there another possibility to debug my game, while it is in the
  market?
  How can I intercept all the errors in my code to find out how I can
  solve them?

  If nobody has an answer to this, I have to put a
  try {
  ...} catch (Exception e) { /* send this exception and line number over

  internet to me */ }
  on EVERY line of code?

  For example:

          @Override
          public void onCreate(Bundle savedInstanceState) {

  try {
                  DisplayMetrics dm = new DisplayMetrics();
                  getWindowManager().getDefaultDisplay().getMetrics(dm);
                  Global.screen_width = dm.widthPixels;
                  Global.screen_height = dm.heightPixels;
                  Global.screen_width_factor = 320/Global.screen_width;
                  Global.screen_height_factor = 480/Global.screen_height;} 
  catch (Exception e) { /* send exception - METRICS */ }

  try {

                  super.onCreate(savedInstanceState);
                  requestWindowFeature(Window.FEATURE_NO_TITLE);
                  this.getWindow().setFlags
  (WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                  WindowManager.LayoutParams.FLAG_FULLSCREEN 
  );} catch (Exception e) { /* send exception - window */ }

  try {

                  setContentView(R.layout.main);} catch (Exception e) { /* 
  send exception - contentview */ }

  try {

                  //Sound starten
                  SharedPreferences prefs = getSharedPreferences(options, 
  0);
                  Global.bgmusic=prefs.getBoolean(music, true);
                  Global.soundeffects=prefs.getBoolean(soundeffects, 
  true);} catch (Exception e) { /* send exception - start sound */ }

  try {

                  b_start = (Button) findViewById(R.id.b_start);
                  b_start.layout(120*Global.screen_width_factor,
  55*Global.screen_height_factor,
                                  
  (120+buttonwidth)*Global.screen_width_factor, (55+buttonheight)*

  } catch (Exception e) { /* send exception - startbuttoncreated */ }

  and so on

  or is there a better solution?

  Greetings, Martin

  On 3 Feb., 10:11, Martin google-gro...@digle.de wrote:

   Hi!

   I have a game in the market and with flurry analytics, I receive all
   my errors. Here are some of them:

    01/31/10 01:47:39 PM PST        0       class
   java.lang.IllegalArgumentException      

[android-developers] Re: How to get a remote logcat on error?

2010-02-03 Thread Martin
WW, THANK YOU, Emmanuel!!! :-)
I used http://code.google.com/p/android-remote-stacktrace/ (the link
in your page) and now I received some eMails telling me the exact line-
number of a NullPointerException.
Tomorrow, I will solve all the problems.

Greetings!
Martin


On 3 Feb., 18:08, Emmanuel emmanuel.ast...@gmail.com wrote:
 Note that I made a blog entry to explain how I made a crash reporter
 using email on my blog, there 
 :http://androidblogger.blogspot.com/2009/12/how-to-improve-your-applic...

 It's a very effective way to catch the bugs, and to find how they
 happen.

 The fact that it is send by mail ( so the user should accept to send
 it ) makes it really easy to do, you don't need to have a web site to
 handle them, but most of the users won't send it. In my view, if
 nobody sent me an crash report, I take it for granted there is no
 common bug. If a bug is really common and happens often, it will be
 sent !

 Hope it helps,

 Emmanuel

 Ps : By the way, I don't fully understand why Flurry doesn't provide
 the full call stack. They are so close, and they have done most of the
 work to have a super useful tool, and they just stop one inch before
 it... Strange... ( but it makes me feel good to have develop my own
 crash reporter )

 On Feb 3, 5:40 pm, Streets Of Boston flyingdutc...@gmail.com wrote:



  This is not necessary, to catch every line of code.

  Register an uncaught-exception-handler
  (Thread.setDefaultUncaughtExceptionHandler). Before you set it, get
  the current one. You may need to call it from your own uncaught-
  exception-handler.

  In this handler, print out the stack-trace (and some other info such
  as OS-version, phone model, make, etc) to a file (on phone-memory or
  sd-card)

  These above steps are the bare basics.

  In my app, I added a Service and an Activity, both running in a
  different process than my app whose stack-traces i'm logging. If they
  would run in the same process, it woudn't work (calling a Service and
  Activity from a dying process).

  The uncaught-exception-handling code binds to the Service
  (initialization) and upon a stack-trace dump, after having generated
  the file, it does a Service-request:

  The Service starts the Activity that just shows a dialog asking the
  using to submit an error report or not. If the user answers 'Yes',
  then the Activity will read the file with the stack-trace info and
  send it to a web-server (Http). The web-server gets this request,
  generates an e-mail from it that is then sent to my inbox.

  When the uncaught-exception-handler calls the service, it just kills
  and extis the process. If the handler could not bind to the Service or
  the Service-request failed, it calls the original default uncaught-
  exception-handler that then shows the common 'Force Close' dialog.

  This has been working well for me and found a few bugs here and
  there :)

  On Feb 3, 5:24 am, Martin google-gro...@digle.de wrote:

   Or is there another possibility to debug my game, while it is in the
   market?
   How can I intercept all the errors in my code to find out how I can
   solve them?

   If nobody has an answer to this, I have to put a
   try {
   ...} catch (Exception e) { /* send this exception and line number over

   internet to me */ }
   on EVERY line of code?

   For example:

           @Override
           public void onCreate(Bundle savedInstanceState) {

   try {
                   DisplayMetrics dm = new DisplayMetrics();
                   getWindowManager().getDefaultDisplay().getMetrics(dm);
                   Global.screen_width = dm.widthPixels;
                   Global.screen_height = dm.heightPixels;
                   Global.screen_width_factor = 320/Global.screen_width;
                   Global.screen_height_factor = 480/Global.screen_height;} 
   catch (Exception e) { /* send exception - METRICS */ }

   try {

                   super.onCreate(savedInstanceState);
                   requestWindowFeature(Window.FEATURE_NO_TITLE);
                   this.getWindow().setFlags
   (WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                   
   WindowManager.LayoutParams.FLAG_FULLSCREEN );} catch (Exception e) { /* 
   send exception - window */ }

   try {

                   setContentView(R.layout.main);} catch (Exception e) { /* 
   send exception - contentview */ }

   try {

                   //Sound starten
                   SharedPreferences prefs = getSharedPreferences(options, 
   0);
                   Global.bgmusic=prefs.getBoolean(music, true);
                   Global.soundeffects=prefs.getBoolean(soundeffects, 
   true);} catch (Exception e) { /* send exception - start sound */ }

   try {

                   b_start = (Button) findViewById(R.id.b_start);
                   b_start.layout(120*Global.screen_width_factor,
   55*Global.screen_height_factor,
                                   
   (120+buttonwidth)*Global.screen_width_factor,