【问题标题】:Logging and crash stack traces not showing in Android StudioAndroid Studio 中未显示日志记录和崩溃堆栈跟踪
【发布时间】:2015-03-06 16:04:33
【问题描述】:

我正在尝试在我的设备上调试应用程序,但调试器遇到了一些问题。我尝试测试记录器,看看它是否会像这样写入 Logcat:

Log.d("MyActivity", "Testing logging...");

但是在带有app: com.myapp.debug 过滤器的 Logcat 中没有任何显示。当我简单地按字符串过滤(使用我的应用程序名称)时出现,但条目如下所示:

01-08 13:45:07.468  29748-29748/? D/MyActivity﹕ Testing logging...

这个问号是否意味着应用程序中的某些内容没有传递给调试器?这可能与我使用调试器的第二个问题有关:

我一直在调试崩溃,每次发生崩溃时,手机只会显示“应用程序没有响应”消息,然后关闭当前活动,断开调试器,应用程序继续运行之前的活动。没有堆栈跟踪,没有关于崩溃的信息,什么都没有。我需要在 Android Studio 中设置什么才能使其正常工作吗?

【问题讨论】:

  • 我经常发现由于某种原因,基于包的过滤会阻止日志输出显示在 logcat 中。为了诊断您的 ANR,我建议:删除 logcat 中的所有过滤,并将日志级别切换为警告(不是错误)。然后滚动输出以查看是否显示了有关 ANR 的任何详细信息。
  • 我不确定,但我遇到了类似的问题。只需点击运行 -> 恢复..
  • 当我按我的应用程序包名过滤时,我在 AS 1.0 中遇到了类似的问题,我在 Logcat 中什么也看不到。移除过滤器会显示设备中的所有内容。
  • 谢谢大家,是的,字符串过滤似乎正在工作。当我崩溃时,我仍然不会直接进入堆栈跟踪,但至少我可以在 Logcat 中看到跟踪,这就是事实!除非有人弄清楚发生了什么,否则最好不要回答这个问题。

标签: java android debugging android-studio


【解决方案1】:

我也遇到了这个问题,我找不到很好的答案。 相反,我做了一个解决方法并使用 Thread.setDefaultUncaughtExceptionHandler() 捕获错误并使用 Log.e() 记录它

我用这个类来做。

  public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
   private final String LINE_SEPARATOR = "\n";
   public static final String LOG_TAG = ExceptionHandler.class.getSimpleName();

  @SuppressWarnings("deprecation")
  public void uncaughtException(Thread thread, Throwable exception) {
    StringWriter stackTrace = new StringWriter();
    exception.printStackTrace(new PrintWriter(stackTrace));

    StringBuilder errorReport = new StringBuilder();
    errorReport.append(stackTrace.toString());

    Log.e(LOG_TAG, errorReport.toString());

    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(10);
   }
}

然后在我的活动中。

   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /**
     * catch unexpected error
     */
    Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());

    setContentView(R.layout.activity_main);

    //other codes
   }

希望这会有所帮助。

【讨论】:

  • 感谢这个有用的课程。
  • 这是超级有用的,几周以来一直在苦苦挣扎。
【解决方案2】:

我认为这是同一个 adb 或 filer 问题。 首先删除所有过滤器。 重启 adb - 输入终端 adb kill-server && adb start-server。

【讨论】:

  • 感谢您指出过滤器,看来我的过滤器被意外设置为 Firebase,所以几乎没有日志出现在 LogCat 上
  • @NeonWarge 你拯救了我的一天!!到底为什么过滤器设置为firebase?
【解决方案3】:

可能您的 google 分析“ga_reportUncaughtExceptions”设置为 true,将其设置为 false 可修复问题并将异常打印到 logcat。有关详细信息,请参阅下面的链接。

Why does android logcat not show the stack trace for a runtime exception?

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多