如何在Linux上使用Emacs调试C/C++源代码?

3
我正在使用emacs和autotools,在Linux上编写和编译c/c++源代码。
我通过emacs中的GUD使用gdb进行调试。
为了方便起见,我定义了以下快捷键:F7:编译,F10:gud-next,F11:gud-step,F5:gud-cont,F9:gud-tbreak,F8:gud-until,F4:gud-print。
我主要关注从emacs上对linux上的c/c++源代码进行调试,并希望能够充分利用gdb所提供的功能。
不幸的是,我只使用了F4,它可以打印光标下的变量。
所以我的问题是,你们如何调试源代码?
你使用哪些程序?
你最常使用哪些快捷键(功能)?
你需要调试器为你做什么?
如果你做一些奇怪的事情也没关系。我想知道所有的方法,以提高我的速度。
谢谢您的帮助。
Mihai
5个回答

3

我使用M-x gdb...命令选择所需的窗口,然后使用gdb提示符。


2

一旦gdb启动,我经常使用C-x SPC在源代码行上设置断点。


1

Valgrind非常适合检测内存错误。大多数情况下,您都能给出错误位置的确切位置。

GDB也很不错,但界面不太好,所以最好使用一些图形用户界面(GUI),例如ddd或Eclipse(是的,我正在使用带有GDB的Eclipse,它内置支持)。


就个人而言,我更喜欢GDB的命令行界面,而不是基于图形界面的设置。我怀疑对于任何在命令行中花费大量时间的人来说这都是真实的。 - stsquad
当独立于集成开发环境(IDE)使用 gdb 时,我更喜欢使用 gdb -tui;而在 Valgrind 和 Clang 静态分析器之间,我更青睐于 Clang 静态分析器。 - Yktula
嗨,各位,当你们给回答投反对票时,会有一个小提示要求你们在评论中解释为什么认为这个回答不好。那么,请问为什么呢? - pajton
他正在谈论在emacs中使用GUD接口与gdb。这是一个完全集成到编辑器中的前端,可以显示当前源文件中的位置等信息。这不是正常的gdb界面。因此,你的回答看起来很无知。 - Justin Smith
@Justin 我特别回答了前两个问题:“那么我的问题是,你们如何调试源代码?你们使用什么程序?” - pajton
你回答了这个问题,但是第二部分让人感觉你没有理解这个问题。他已经在使用一个与 gdb 非常好集成的前端。 - Justin Smith

1

使用命令行而不是键盘绑定可以充分利用 gdb 的功能。我常用的最有用的命令:

  • bt - 打印回溯信息,了解当前的完整上下文
  • s, n, cont - 单步执行,下一步,继续执行
  • run - 在同一会话中重新启动非常有用
  • watch - 设置监视点,捕获值更改时非常有用
  • call - 调用一个函数
  • display - 每次程序停止时打印一个值。

-1

我只在出现分段错误时使用调试器来获取回溯信息。对于其他所有情况,我都使用 printf 调试。


使用printf进行调试是很糟糕的。不仅需要重新编译和链接,可能会引入其他错误,而且效率低下、耗时长,还容易出错。使用调试器吧,毕竟它就是为此而存在的。 - RichieHH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接