软件是否可能在GDB中中断本机客户端应用程序并继续执行?

软件是否可能在GDB中中断本机客户端应用程序并继续执行?,gdb,google-nativeclient,Gdb,Google Nativeclient,是否有人有过使用Windows本机客户端调试器调试本机客户端应用程序的经验 我正试图在应用程序代码中触发一个软件断点或异常,它将停止连接并在源代码行上运行的GDB,并能够继续执行 我可以通过创建非法地址异常来实现这一点,例如: #define SOFTBREAK { int *p=0; p=0; } 在使用define时,它会进入调试器: Program received signal SIGSEGV, Segmentation fault. 0x0000000c00209ba2 in CTe

是否有人有过使用Windows本机客户端调试器调试本机客户端应用程序的经验

我正试图在应用程序代码中触发一个软件断点或异常,它将停止连接并在源代码行上运行的GDB,并能够继续执行

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

#define SOFTBREAK { int *p=0; p=0; }
在使用define时,它会进入调试器:

Program received signal SIGSEGV, Segmentation fault.
0x0000000c00209ba2 in CTestTestList::Init (this=0xfe55d080) at ../testlist.cpp:1242
1242    in ../testlist.cpp
但是,我似乎无法继续执行使用跳转命令跳过换行符(使用下一个源代码行或程序集地址)。在继续之前,我是否需要确认或清除分段故障

有人知道是否可以使用非法地址异常继续执行吗?或者是否可以使用不同的方法,例如,引发软件异常(EXC_软件)? 任何帮助或建议都将不胜感激

(顺便说一句,这是我第一次发布stack overflow,如果我没有遵守这篇文章的任何礼仪,请道歉。)

非常感谢,


Andy

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

volatile int var = 1;
while (var);
然后我在调试器中更改相应的寄存器值

set $rax = 0

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

volatile int var = 1;
while (var);
然后我在调试器中更改相应的寄存器值

set $rax = 0
您可以使用
\uuuasm\uuu3]与winGDB,如详细所示

您可以使用
asm(“int3”)与winGDB,如详细所示


谢谢您的反馈“哈”。这是非常有用的,它确实为我工作。然而,(以防万一其他人也这么认为),在GDB版本中,我使用的“var”似乎是一个关键字,因此我不得不使用不同的名称。另外,由于'var'标记为volatile,所以每次循环迭代都会从内存中读取它,因此我使用:setmyvar=0。再次感谢你!:)谢谢你的反馈“哈”。这是非常有用的,它确实为我工作。然而,(以防万一其他人也这么认为),在GDB版本中,我使用的“var”似乎是一个关键字,因此我不得不使用不同的名称。另外,由于'var'标记为volatile,所以每次循环迭代都会从内存中读取它,因此我使用:setmyvar=0。再次感谢你!:)int 3是我尝试的第一件事情之一,但这违反了本机客户端安全规则,因此NaCl插件无法加载应用程序(NACLLOG中报告了验证失败)。(不确定是否可以禁用此检查?)感谢您的响应,尽管Colt.int 3是我尝试的第一件事情之一,但这违反了本机客户端安全规则,因此NaCl插件无法加载应用程序(NACLLOG中报告验证失败)。(不确定是否可以禁用此检查?)。