Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caught Exceptions having error object from ANRWatchDog not getting logged on Crashlytics Dashboard #29

Closed
harminderkharbanda opened this issue Sep 18, 2017 · 10 comments

Comments

@harminderkharbanda
Copy link

Hi,

I am using ANRWatchDog to catch ANRs. It provides an 'error' object which I am logging to crashlytics. I am getting report upload complete logs for crashlytics but nothing appears on dashboard. Crashlytics is working fine at the same time for other types of caught/uncaught exceptions.

private ANRListener listener = new ANRListener() {
@OverRide
public void onAppNotResponding(ANRError error) {
try{
Crashlytics.logException(error);

        } catch (Exception e) {
            Logger.e(TAG, "Exception while sending ANR stacktrace to Crash reporter "+e.getStackTrace());
        }

    }
};

I have raised the issue with Crashlytics team as well. Wanted to know here if any known issue exists in ANRWatchDog.

@voidshad
Copy link

Hi,
We`ve come across exactly the same problem. onAppNotResponding callback is raised, but the issue on crashlytics never created. Any thoughts or updates on this?

@navaneet
Copy link

navaneet commented Sep 27, 2017

I too was having this issue earlier, it seems when you Log a non-runtime exception in crashlytics it creates nonfatal exceptions in fabric dashboard since ANRs don't necessarily crash an application. You need to toggle the switch in the fabric dashboard to show all exceptions including non-fatals as by default it only shows fatal exceptions.

screen shot 2017-09-27 at 11 53 25 pm

Another issue might be proguard which when enabled strips some important classes required by anrWatchDog. To prevent that use the following rule in your proguard-rules.pro file.

-keep class com.github.anrwatchdog.** { *; }

You might also want to do the following to change the error into string

  anrWatchDog.setANRListener(new ANRWatchDog.ANRListener() {
            @Override
            public void onAppNotResponding(ANRError error) {
                StringWriter sw = new StringWriter();
                error.printStackTrace(new PrintWriter(sw));
                CrashUtil.logException(new RuntimeException(sw.toString()));
            }
        });

Hope it helps!

@harminderkharbanda
Copy link
Author

@navaneet Regarding the dashboard thing, I have already selected "All Events".

Will surely look into the 2nd part of your solution though. Thanks!

Btw Fabric team replied that they are receiving an empty report and hence it is not showing in the dashboard. Any thoughts?

@navaneet
Copy link

navaneet commented Sep 28, 2017

Not sure, however if it logs into logcat it should log into fabric too. Try logging to logcat and then check against fabric if the same error is getting logged.

@voidshad
Copy link

I dont think that proguard is the case because weve got the same situation for our debug builds (which arent minimized). But Ill give it a try.
I also tried it with some dummy exception and it works fine. So the problem is definitely with ANRError class

@mflesh1
Copy link

mflesh1 commented Oct 24, 2017

I have been looking into this, and I was able to get this to work by setting the ANRWatchDog to only report the main thread.

anrWatchDog.setReportMainThreadOnly()

I still cannot get this to work without that setting.

@mflesh1
Copy link

mflesh1 commented Oct 25, 2017

I contacted Crashlytics support and they stated:

Our limit is around 64kb or 128kb in some cases. It looks like ANRwatchdog is producing reports over 500kb

So looks like currently you must use the setReportMainThreadOnly() option as it limits the size of the report.

@umair6
Copy link

umair6 commented Dec 8, 2017

@mflesh1 I think issue is because of ANR format. Crashlytics is expecting an exception which normally contains a message and a stack trace. When "setReportMainThreadOnly" is disabled, ANRError creates a nested stack trace of all threads which Crashlytics does not accept. If I convert the ANRError into a string, as suggested by @navaneet , then it get posted fine. But then there is error grouping issue on crashlytics dashboard which I am currently trying to figure out. .

@Fossor
Copy link

Fossor commented Jun 7, 2018

ANRError indeed is too big for Crashlytics. I convert errors into text files and upload to Firebase storage it is free and you can setup it from Android Studio.

@SalomonBrys
Copy link
Owner

The documentation warns about this.
That's all I can do 😞

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants