在C文件中设置GDB断点

时间:2012-03-12 17:10:53

标签: c gdb

在编译之前,是否可以在C文件中添加GDB断点?目前,我必须在通过GDB编译后指定断点。

我正在寻找类似于JavaScript debugger;声明的内容。

3 个答案:

答案 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)

在Linux上的

,我假设你正在使用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