首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用waitForDebugger的Android与jdb混淆

使用waitForDebugger的Android与jdb混淆
EN

Stack Overflow用户
提问于 2010-06-24 14:12:18
回答 3查看 2.6K关注 0票数 3

我想使用命令行在我的设备(Nexus One --不是模拟器)上调试我的Android应用程序。

我对如何结合使用jdb和android.os.Debug.waitForDebugger来设置断点感到困惑。

假设我将以下代码放入我的主活动onCreate

代码语言:javascript
复制
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    android.os.Debug.waitForDebugger();
    int j = 10;
    int r = j;
}

使用ddms,我可以看到当我启动应用程序时,它正在等待调试器(红色的bug图标)。

但是,我不知道如何在waitForDebugger()调用后设置断点,以便开始单步执行。

显然,只需附加jdb就会立即继续运行应用程序,而不会停止。

例如:

代码语言:javascript
复制
jdb -attach localhost:8700

有没有办法在运行jdb之前预置断点,或者启动jdb时先设置断点,然后再附加?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-25 03:43:38

不幸的是,VM无法告诉调试器它已经挂起了。如果初始状态不是"running“,我尝试过的各种调试器都会感到困惑。因此,在调试器连接之后,VM必须恢复所有线程。(上面的唯一例外是如果虚拟机刚刚启动,在这种情况下,它可以发送一个特殊的“我刚刚启动”消息,指示它是要启动、运行还是保持挂起。这在这里没有帮助。)

waitForDebugger()所做的就是等待调试器发出的初始突发活动平息下来。调试器连接后,该方法将处于休眠状态,直到调试器在1.5秒内没有任何活动。这使调试器有机会在VM恢复之前设置任何断点。

对于Eclipse,这个技巧效果很好,因为您可以在附加之前配置断点。对于jdb,我没有办法在它启动后告诉它附加,所以你必须在键盘上快速操作,或者使用某种配置文件(我也看不到)。

您可以用不同的方法来解决这个问题:在waitForDebugger调用下面,添加一个循环,如下所示:

代码语言:javascript
复制
static volatile boolean staticField = false;
  ...
while (!MyClass.staticField) {
    Log.d(tag, "waiting for go");
    Thread.sleep(2000);
}

然后,在按照您想要的方式配置jdb之后,使用如下内容:

代码语言:javascript
复制
> set MyClass.staticField = true

如果你速度快,你可以跳过循环,只使用Thread.sleep(5000),给自己一点额外的时间来处理断点。

票数 1
EN

Stack Overflow用户

发布于 2010-08-13 03:42:35

在Linux中,jdb有一个配置文件:~/.jdrbc。例如,在我的文章中,我有:

代码语言:javascript
复制
stop in net.richardriley.myproj.myact.onCreate

在您的设备仿真器开发设置中,您可以为有问题的应用程序类设置“等待调试器”。运行应用程序,启动调试器,调试器就会中断。

票数 3
EN

Stack Overflow用户

发布于 2010-10-12 01:28:26

我尝试了两种解决方案( fadden和Richard Riley的解决方案),但都不起作用。一旦jdb连接到调试端口(通过Dalvik连接到8700),在仿真器中启动的应用程序就会被解锁,但随后它会独立运行,根本不与jdb同步。引入等待循环不会改变事情,.jdbrc中的断点命令也不起作用。jdb的回答总是“推迟断点等。它将在类加载后设置。”,因为应用程序没有运行;但是,如果你输入"run“,答案是"Nothing Suspend.”,因为应用程序已经在运行了……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3107587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档