在编译之前,是否可以在C文件中添加GDB断点?目前,我必须在通过GDB编译后指定断点。
我正在寻找类似于JavaScript debugger;
声明的内容。
答案 0 :(得分:5)
不是这样,但你可以插入一些有用的函数调用:
一种选择是创建一个函数:
void break_here ()
{
/* do nothing */
}
然后在任何地方调用它,但要小心它不会被内联(将它放在不同的文件中,或添加“noinline”属性)。
然后,在GDB中,只需在break_here
上设置一个断点,就完成了。如果您发现每次设置该断点都很繁琐,可以在主目录或包含断点命令的当前工作目录中创建名为.gdbinit
的文件。
适用于Linux的另一个选项是使用信号:
raise (SIGUSR1);
你可以使用你喜欢的任何信号,但最好使用一个不会杀死你的程序的信号(尽管你可以配置GDB不将它们传递给你的程序,如果你选择的话)。
答案 1 :(得分:2)
我不知道直接设置断点的方法,但GDB会捕获中断,因此这是一种可能的解决方案。
这样的事情应该有效。你需要包含signal.h:
raise(SIGABRT);
答案 2 :(得分:0)
,我假设你正在使用gdb,你可以使用代码中的注释创建一个脚本
#!/bin/bash
#debug: Script to run programs in gdb with comments to specify break
points
echo "file ./a.out" > run
grep -nrIH "/\*GDB\*/" |
sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
awk '{print "b" " " $1 }'|
grep -v $(echo $0| sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r
exit 0
然后只要你需要一个断点,只需添加/*GDB*/
,脚本将使用grep查找包含这些注释的行号和文件,并在它找到的每个文件的每一行上设置一个断点,然后启动gdb