在使用Android NDK和GDB断言后继续

时间:2012-10-23 21:34:02

标签: android eclipse android-ndk gdb breakpoints

是否有可能在Android NDK程序中从C ++触发GDB中断,这仍然允许程序在之后恢复?

意思是,我点击断言导致GDB暂停程序,我希望能够按下Eclipse中的“Play”按钮恢复程序,继续超出断言。

现在我正在使用:

__asm__ ("bkpt 0");

这会触发程序暂停,并将我带到触发它的代码行,但不允许我在之后恢复。

GDB在程序暂停时输出以下内容。

(gdb) 
82 info signal SIGBUS
&"info signal SIGBUS\n"
~"Signal        Stop\tPrint\tPass to program\tDescription\n"
~"SIGBUS        Yes\tYes\tYes\t\tBus error\n"
82^done
(gdb) 

如果我此时按“恢复”,我会在LogCat中获得以下输出:

Fatal signal 11 (SIGSEGV) at 0xfffffffd (code=1)

也许我的问题是如何抛出非致命休息?

1 个答案:

答案 0 :(得分:2)

检测您的进程是否正在调试的标准Linux方法是:

if (ptrace(PTRACE_TRACEME, 0, NULL, 0) == -1)
    //Yes, we're running under GDB

考虑到这一点,请执行仅在调试器下触发的条件硬断点(bkpt 0)。

不确定Android中仅Java调试是否会影响ptrace。试一试。

编辑:致电raise(SIGABRT)打破。然后在GDB中,键入signal 0以继续。其他信号,如SIGINT和SIGTRAP,也可能有效。