android - 使用 Android NDK 和 GDB 断言后继续

标签 android eclipse android-ndk gdb breakpoints

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

意思是,我按下了断言,导致 GDB 停止程序,并且我希望能够在 Eclipse 中按“播放”按钮来恢复程序,继续执行断言之外的操作。

现在我正在使用:

__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)

也许我的问题是如何抛出一个非致命中断?

最佳答案

检测进程是否正在调试的标准 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)也可能起作用。

关于android - 使用 Android NDK 和 GDB 断言后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13039652/

相关文章:

Java outOfMemoryError - 增加 Java 堆空间没有帮助(?)

android - Android项目中的C++ Firebase链接错误

android - 如何选择矢量绘图?

android - 从 EditText 中删除自动对焦并重新获得焦点?

eclipse - 是否有适用于 Eclipse Indigo 的 Apache Axis WSDL2Java jar 文件

java - 在 Eclipse 中运行程序时出现问题 - 类路径错误

java - 我对 abiFilters 配置有疑问

performance - Simpleperf 不会展开堆栈

android - 如何在 Android Studio 中将 1200 格式化为 1.2k

java - 使用 JSF 编辑 mysql 的单行