gud如何输入,以及gud和gdb,realgud的关系

由于我linux下的vscode配置有问题,本蒟蒻打算正好学一下emacs下的调试。 使用M-x gdb调试可以看到有个Input和Output buffer提供输入,但是gud不知道怎么输入,它没有那个buffer!查了一些教程都是些很老的gdb教程。。 看下图,程序一直卡在那等待我输入。

顺便想请教一下gud和gdb有啥关系,然后我还看到有人推荐realgud ,调试c++的话用啥好呢?想听听大家的意见。

gudGrand Unified Debugger的简写,这是一个关于debugger的抽象。基于这个之上,就有了gdb,pdb等调试工具,可以分别调试c/c++/rust等生成的带调试信息的elf文件。

Emacs自带的调试器比较少,常用的只有gdb, pdb。而realgud在自带的基础上还提供了更多的调试器,包括lldbnode调试支持等。

如果是仅调试c++且有gdb支持,那么自带的就可以了。如果是在 mac 下需要使用lldb, 那么还是装一个realgud吧。

使用gdb/lldb,需要输入重定向,那么直接在调试时r < file.in将使用file.in这个文件的内容作为输入流。这部分是独立的,与在Emacs里使用gdb/lldb还是在外部使用都是一样的。

1 个赞

程序被调试器暂停的时候你才可以输入调试器命令,从截图上看,你的程序正在等待输入(所以算是在运行)。设一个断点,等停在断点的时候你就可以输入了。

Emacs自带有GUD和GDB,GUD是支持多种调试器的通用前端,但是功能比较简陋 ,和纯命令行调试器比主要优点是可以在另一个窗口中显示源代码位置,以及用快捷键在源代码里设置断点。如果用GUD运行GDB的话,是M-x gud-gdb

GDB模式则只支持GDB一种调试器,但支持得比较完善,大多数现代图形化调试器应该有的东西都有,例如变量窗口,断点窗口等等。M-x gdb运行的是这个GDB模式。如果没看到调试器窗口的话,输入M-x gdb-many-windows就出来了。

realgud是个第三方的多种调试器包。

我设置完断点后还是没办法输入,然后我开启了gdb many window找到输入窗口在里面输入,奇怪的是程序依然卡在那里。

程序还没运行到你的断点吧?

我看了这篇文章,设置break main,然后next到我输入的地方,并没有弹出另外的输入窗口

建议先熟悉直接用命令行的gdb,因为所有的调试工具其实都是gdb的前端界面。

熟悉gdb的命令对掌握各种调试工具的界面会有很大的帮助。

另外gdb自带TUI, 一般简单的调试足够了。而且不需要安装任何其他工具,几乎任何环境都可以使用。甚至远程调试。

1 个赞