Cha*_*les 3 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)
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以安装stop 挂钩 hook-stop
并使用shell
后跟一个命令,以便在调试器停止时执行它,例如运行cmd
(Windows),以便它在停止时从 shell 中回显一些字符串:
define hook-stop
shell cmd /c echo "hello"
end
Run Code Online (Sandbox Code Playgroud)
替换cmd /c echo "hello"
为您想要的命令,然后将其复制并粘贴到调试器中,现在当我的程序崩溃时:
#include <stdio.h>
int main(int argc, char **argv) {
int *p = NULL;
printf("%d\n", *p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我应该看到“你好”:
> 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)
Run Code Online (Sandbox Code Playgroud)