是否有可能在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)
也许我的问题是如何抛出非致命休息?
答案 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,也可能有效。