1

有没有人有使用 这里描述的 Windows Native Client 调试器调试 Native Client 应用程序的经验?

我正在尝试在应用程序代码中触发软件断点或异常,这将在触发它的源行停止附加和运行的 GDB 并能够继续执行。

我可以通过创建非法地址异常来做到这一点,例如:

#define SOFTBREAK { int *p=0; p=0; }

它确实会在使用定义的地方进入调试器:

Program received signal SIGSEGV, Segmentation fault.
0x0000000c00209ba2 in CTestTestList::Init (this=0xfe55d080) at ../testlist.cpp:1242
1242    in ../testlist.cpp

但是我似乎无法使用跳转命令继续执行以跳过断行(使用下一个源代码行或汇编地址)。在继续之前,我是否需要确认或清除分段错误?

有谁知道是否可以使用非法地址异常继续执行?或者是否可以使用其他方法,例如引发软件异常 (EXC_SOFTWARE)?任何帮助或建议将不胜感激。

(顺便说一句,这是我第一篇关于堆栈溢出的帖子,所以如果我在这篇帖子中没有遵守任何礼仪,我深表歉意。)

非常感谢,

安迪

4

2 回答 2

1

我通常出于同样的目的使用无限循环。

volatile int var = 1;
while (var);

然后我在调试器中更改相应的寄存器值。

set $rax = 0
于 2012-02-02T13:08:31.057 回答
0

您可以__asm__("int3");与 winGDB 一起使用,详见此处

~主要

于 2012-02-02T22:53:21.917 回答