3

我正在和一个盲人学生一起工作。她可以从命令行运行 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)
4

1 回答 1

5

您可以安装停止钩子 hook-stop并使用shell后跟命令,以便在调试器停止时执行它,例如运行cmd(Windows),因此它会在停止时从 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)
于 2013-10-13T19:20:04.887 回答