由于我linux下的vscode配置有问题,本蒟蒻打算正好学一下emacs下的调试。 使用M-x gdb调试可以看到有个Input和Output buffer提供输入,但是gud不知道怎么输入,它没有那个buffer!查了一些教程都是些很老的gdb教程。。 看下图,程序一直卡在那等待我输入。
顺便想请教一下gud和gdb有啥关系,然后我还看到有人推荐realgud ,调试c++的话用啥好呢?想听听大家的意见。
由于我linux下的vscode配置有问题,本蒟蒻打算正好学一下emacs下的调试。 使用M-x gdb调试可以看到有个Input和Output buffer提供输入,但是gud不知道怎么输入,它没有那个buffer!查了一些教程都是些很老的gdb教程。。 看下图,程序一直卡在那等待我输入。
顺便想请教一下gud和gdb有啥关系,然后我还看到有人推荐realgud ,调试c++的话用啥好呢?想听听大家的意见。
gud
是Grand Unified Debugger
的简写,这是一个关于debugger
的抽象。基于这个之上,就有了gdb
,pdb
等调试工具,可以分别调试c/c++/rust
等生成的带调试信息的elf
文件。
Emacs自带的调试器比较少,常用的只有gdb
, pdb
。而realgud
在自带的基础上还提供了更多的调试器,包括lldb
,node
调试支持等。
如果是仅调试c++且有gdb
支持,那么自带的就可以了。如果是在 mac 下需要使用lldb
, 那么还是装一个realgud
吧。
使用gdb
/lldb
,需要输入重定向,那么直接在调试时r < file.in
将使用file.in
这个文件的内容作为输入流。这部分是独立的,与在Emacs里使用gdb
/lldb
还是在外部使用都是一样的。
程序被调试器暂停的时候你才可以输入调试器命令,从截图上看,你的程序正在等待输入(所以算是在运行)。设一个断点,等停在断点的时候你就可以输入了。
Emacs自带有GUD和GDB,GUD是支持多种调试器的通用前端,但是功能比较简陋 ,和纯命令行调试器比主要优点是可以在另一个窗口中显示源代码位置,以及用快捷键在源代码里设置断点。如果用GUD运行GDB的话,是M-x gud-gdb
GDB模式则只支持GDB一种调试器,但支持得比较完善,大多数现代图形化调试器应该有的东西都有,例如变量窗口,断点窗口等等。M-x gdb运行的是这个GDB模式。如果没看到调试器窗口的话,输入M-x gdb-many-windows就出来了。
realgud是个第三方的多种调试器包。
程序还没运行到你的断点吧?
建议先熟悉直接用命令行的gdb,因为所有的调试工具其实都是gdb的前端界面。
熟悉gdb的命令对掌握各种调试工具的界面会有很大的帮助。
另外gdb自带TUI, 一般简单的调试足够了。而且不需要安装任何其他工具,几乎任何环境都可以使用。甚至远程调试。