在C文件中设置GDB断点

Ran*_*lue 3 c gdb

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

我正在寻找类似JavaScript的debugger;声明.

ams*_*ams 5

不是这样,但你可以插入一些有用的函数调用:

一种选择是创建一个函数:

void break_here ()
{
  /* do nothing */
}
Run Code Online (Sandbox Code Playgroud)

然后在任何你想要的地方调用它,但要小心它不会被内联(将它放在不同的文件中,或添加"noinline"属性).

然后,在GDB中,只需设置一个断点break_here,就完成了.如果您发现每次设置该断点都很繁琐,则可以.gdbinit在主目录或包含断点命令的当前工作目录中创建一个文件.

在Linux上运行的另一个选项是使用信号:

raise (SIGUSR1);
Run Code Online (Sandbox Code Playgroud)

你可以使用你喜欢的任何信号,但最好使用一个不会杀死你的程序的信号(尽管你可以配置GDB不将它们传递给你的程序,如果你选择的话).

  • 像这样声明函数:`void break_here(void)__attribute __((optimize(0)));`.只使用`__attrubute __((noinline))`不会阻止GCC完全优化呼叫.或者,此行将关闭源文件的其余部分的优化:`#pragma GCC optimize("0")`,如果要在其他优化的构建中调试一个模块,这将非常有用. (2认同)