获取gdb以在发生中断或崩溃时运行命令

时间:2013-10-13 18:23:35

标签: scripting gdb accessible

我正在和一个失明的学生一起工作。她可以从命令行运行gdb来调试基于窗口的程序,但该程序从gdb获取焦点,因此如果遇到断点或程序崩溃,则屏幕阅读器不会读取gdb结果。理想情况下,它希望焦点在获得gdb输出时转到终端,但是否则,当gdb命中断点或程序崩溃时,有没有办法运行linux命令?然后我可以运行“espeak gdb”,她会知道gdb需要得到关注。

似乎应该有一种简单的方法来使用.gdbinit中的脚本来完成这项工作。

稍后编辑:

我发现您可以将此代码放入.gdbinit:

python
import os
def stop_handler (event):
os.system("espeak gdb")

gdb.events.stop.connect (stop_handler)

1 个答案:

答案 0 :(得分:4)

您可以安装stop hook hook-stop并使用shell后跟命令,以便在调试器停止时执行,例如运行cmd(Windows),以便它在stop上回显shell中的一些字符串:

define hook-stop
    shell cmd /c echo "hello"
end

cmd /c echo "hello"替换为您想要的命令,并将其复制并在调试器中将其复制,现在我的程序崩溃了:

#include <stdio.h>

int main(int argc, char **argv) {
  int *p = NULL;

  printf("%d\n", *p);

  return 0;
}

我应该看到“你好”:

> gdb -q a.exe
Reading symbols from a.exe...done.
(gdb) define hook-stop
Type commands for definition of "hook-stop".
End with a line saying just "end".
>    shell cmd /c echo "hello"
>end
(gdb) run
Starting program: a.exe
[New Thread 420.0x430]

Program received signal SIGSEGV, Segmentation fault.
"hello"
0x004013a6 in main ()
(gdb)