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

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

但是,使用app: com.myapp.debug过滤器在Logcat中什么都没有显示。当我仅通过字符串(使用我的应用名称)进行过滤时,它就会出现,但条目看起来像这样:
01-08 13:45:07.468  29748-29748/? D/MyActivity﹕ Testing logging...

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

我一直在调试崩溃,每次崩溃时,电话只会显示“应用程序无响应”消息,然后关闭当前 Activity ,断开调试器的连接,并且该应用程序将继续使用先前的 Activity 运行。没有堆栈跟踪,没有关于崩溃的信息,什么都没有。我需要在Android Studio中进行设置才能使其正常工作吗?

最佳答案

我也遇到了麻烦,对此我找不到很好的答案。
相反,我做了一个变通方法,并使用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);
   }
}

然后在我的 Activity 中。
   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

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

    setContentView(R.layout.activity_main);

    //other codes
   }

希望这可以帮助。

09-10 09:22
查看更多