【问题标题】:Print logs on Android source code using Eclipse breakpoints?使用 Eclipse 断点在 Android 源代码上打印日志?
【发布时间】:2013-05-21 08:01:22
【问题描述】:

为了了解系统在做什么,我想使用 java 调试器条件断点机制在 Android 源代码的特定行上打印日志消息。

我该怎么做?我不完全知道,这就是这个问题。

我知道的事情:
Eclipse java 调试器具有“条件断点”,即您在代码中设置断点并编写条件。每次代码到达断点行,只有你写的条件是true才会停止执行,否则不会停止。

我认为也许这种机制可以被扭曲以在代码的特定行打印日志消息,而不是停止执行。如果可以做到,我就可以跟踪 Android 的源代码在做什么。

【问题讨论】:

  • 我不明白这个问题,请改进。
  • @Warpzit 我重写了它。我希望现在更清楚了。

标签: java android eclipse debugging conditional-breakpoint


【解决方案1】:

您可以在条件断点中使用以下表达式:

android.util.Log.v("MyApp", "my message") == -1

这将使您的断点不会中断执行,并且在 LogCat 视图中,使用 tag:MyApp 表达式过滤视图,您将获得所需的记录消息。您还可以使用其他日志级别(aiew)。请参阅日志documentation 了解更多信息。

要让断点始终中断,请使用:

android.util.Log.v("MyApp", "my message") >= 0

Log.v 的返回值是日志消息内部的字节数,所以它总是一个正数。

附录: 有一种更优雅的方法可以做到这一点。 Eclipse 条件断点可以是任何 java 代码,包括在断点处使用局部变量。如果你真的想停止执行,最后一个返回值必须是true,或者false。所以同样可以实现:

android.util.Log.v("MyApp", "my message");
return false;

或者您可以做出更复杂的陈述,例如:

if( t.isNumber() ) {
    System.out.println("A number found");
} else {
    System.out.println("Not a number");
    return true; // stops execution
}
android.util.Log.v("MyApp", "my message");
return false; // does not stop execution

【讨论】:

  • 你是个天才!像魅力一样工作!
  • 也许你也知道为什么断点条件不能识别我的包名?我写了(com.example.test.MyClass.stop == 2)stop 是MyClass 的public static int。 Eclipse 告诉我 条件断点有编译错误。原因:com.example 无法解析为变量
  • 我已经看到了,但我从来没有因为找到解决方案而烦恼。一种解释是:wiki.eclipse.org/FAQ_How_do_I_set_a_conditional_breakpoint%3F 在我的情况下,我总是围绕表达式工作或使用其他调试技术。
猜你喜欢
  • 2023-04-05
  • 2019-03-10
  • 2010-11-21
  • 2021-02-27
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多