在Linux上是否有C++ gdb图形化界面?

224
简而言之:有没有适用于gdb的图形用户界面(GUI),其功能集与更近期的Visual C++相当或接近?
详细地说,作为一个在Windows平台上花费了很多时间编程的人,在Linux中编写C++代码时,我发现使用命令行gdb进行调试比在Visual Studio中花费的时间要长几倍,并且练习也似乎并没有改善。有些事情在图形化界面下表达起来更容易或更快捷。
具体来说,我正在寻找一个可以:
- 处理所有基本操作,如跨步、进入代码,监视变量和断点。 - 理解并可以显示复杂嵌套的C++数据类型的内容。 - 不会被困惑,最好可以智能地遍历模板代码和数据结构,并显示相关信息,例如参数类型。 - 可以处理线程应用程序,并在不同线程之间切换以便遍历或查看状态。 - 可以附加到已经启动的进程或读取核心转储,除了在gdb中启动程序。
如果不存在这样的程序,那么我想听听人们对满足至少一些项目符号的程序的经验。有人有推荐吗?
编辑:列出可能性很好,我会尽力而为,但是如果您可以在回答中包含以下内容,那就更有帮助:
(a) 您是否真正使用过此GUI,如果使用过,请提供您的正负反馈意见。 (b) 如果您知道的话,上述哪些功能是/不支持。
这样可以轻松得到列表,像这样的网站非常好,因为你可以了解到人们使用应用程序的个人经验。

22
“像这样的网站非常棒,因为你可以了解到人们的个人经历。”现在有太多人只是简单地列出一张清单,我认为这完全错过了重点。+1 - kizzx2
1
关于反向工程:http://reverseengineering.stackexchange.com/questions/1392/decent-gui-for-gdb - Ciro Santilli OurBigBook.com
请查看此处的gdb前端列表:https://sourceware.org/gdb/wiki/GDB%20Front%20Ends,并尝试列表中的第一个。它看起来非常有前途和现代化,而且由于基于浏览器,因此是跨平台的:https://www.gdbgui.com/。 - Gabriel Staples
28个回答

87

Eclipse CDT将提供类似于使用Visual Studio的体验。我每天都使用Eclipse CDT编写代码并调试本地和远程进程。

如果您不熟悉使用基于Eclipse的IDE,则GUI需要一点时间来适应。但是,一旦理解了Eclipse独有的GUI思想(例如透视图),使用该工具就变得非常愉快。

CDT工具提供了一个不错的C/C ++索引器,可以快速查找代码库中方法的引用。它还提供了一个很好的宏展开工具和有限的重构支持。

关于调试支持,CDT能够完成您列表中除读取核心转储之外的所有操作(可能会支持此功能,但我从未尝试过使用此功能)。此外,我使用模板调试代码的经验有限,因此我不确定CDT在这方面提供什么样的体验。

有关使用Eclipse CDT进行调试的更多信息,您可能需要查看以下指南:


10
支持阅读核心转储文件(也称为死后调试器)。 - Josh Kelley
我在使用Eclipse CDT调试时的体验比在Visual Studios中要好。虽然我没有给MSVC太多机会。 - notlesh
4
我认为应该将QtCreator与Eclipse并列提及,因为它们是可以相互比较的。 - nonsensickle

79

如果你想要一些图形化界面,但仍然是基于字符的,那么gdb -tui可以正常工作。


48
在gdb中,您还可以使用“-”命令进入TUI(文本用户界面)模式。返回命令提示符是Ctrl-X Ctrl-A。在TUI模式下,向上、向下、向左和向右移动将穿过源代码。使用Ctrl-P、Ctrl-N、Ctrl-F和Ctrl-B在命令行历史记录中导航。 - Ben Combee
这正是我一直在寻找的。gdb命令行的强大功能,配合一些有用的视图,可以随着我的移动而更新。 - Kevin Cox
8
一个强化版的.gdbinit可以为您提供一个非常出色的基于字符的GUI界面,并带有颜色:https://github.com/cyrus-and/gdb-dashboard - cs01
我非常喜欢gdb-dashboard,但也必须提到voltron - nonsensickle
4
@Barry谢谢。对于任何好奇的人,这里是链接:https://github.com/cs01/gdbgui。它具有类似DDD的数据结构显示,客户端/服务器架构可以轻松调试无需X转发的远程机器,并且能够探索复杂的变量等等。 - cs01

56

使用GDB无法找到与Visual Studio调试器原始功能相竞争的任何覆盖物。它太强大了,而且它在IDE中整合得太好了。

如果你喜欢免费软件,那么可以尝试DDD作为Linux替代品。


2
WinDBG比Visual Studio提供的要好得多。Visual Studio调试器基于与WinDBG相同的架构。 话虽如此,与Windbg相比,GDB无可比拟。一个比DDD更好的图形化调试器将是很棒的。Eclipse CDT是一个不错的选择。我认为还有一个KDE用户界面。 - bigmonachus
135
哦,看这里。一个回答提出了一个主张,却没有任何支持证据。我也觉得奇怪的是,那个“不回答问题”的答案被采纳了。 - alternative
5
如果您来到这里寻找真正的答案,那么请注意,ddd是垃圾。我发现适用于Linux的最佳调试器GUI是IDA,但它不是免费软件。 - bkconrad
2
回答问题最好的方式就是尽力而为,否则不说话。使用过两者后,Visual Studio 拥有更多功能,但DDD也足够好,我不会怀念 VS。可惜的是,DDD已经有点老了。 - Alan De Smet
7
这篇文章需要更新/改进。Qt Creator非常棒,与Visual Studio不相上下。 - vharron
显示剩余5条评论

52

请查看Nemiver C/C++调试器。在Ubuntu中很容易安装(开发工具/调试)。

更新:新链接。


绝对精彩,还支持apt:'apt-get install nemiver'。我唯一的抱怨是由于“未找到gconf-2.0软件包”,从repo构建失败了。 - J Evans
界面非常清晰易读,但在使用接口功能v0.9.6时有时会崩溃。它还可以接受调试应用程序参数,这是我仍然无法让ddd做到的。 - Aquarius Power
还可以在 Fedora 30 上使用(至少)。我刚偶然发现了这个问题和 nemiver。 - user3236841

32

Qt Creator看起来是很不错的东西。我的同事向我展示了一种为其设置调试环境的方法:

  • 创建一个新项目,“导入基于Makefile的项目”。
  • 将其指向您的根项目文件夹(它将在其中索引源代码,且索引速度非常快)。
  • 进入项目设置并添加运行配置,然后指定要调试的可执行文件及其参数。
  • Qt Creator似乎坚持在调试之前先构建您的项目。如果您不想这样做,或者不使用make,请转到项目->构建(左侧面板),然后在“构建步骤”中的右侧面板中删除所有步骤,包括默认创建项目时的步骤。

这可能看起来有点繁琐,用于调试我已经编译过的应用程序,但这是值得的。调试器以与Visual Studio类似的方式显示线程、堆栈和本地变量,并使用许多相同的键盘快捷方式。它似乎能够很好地处理模板,至少std::string和std::map。支持连接到现有进程和核心转储文件,虽然我还没有测试过。

请记住,我现在只用了不到一个小时,但到目前为止我印象深刻。


30

我讨厌Windows开发,但VC++调试器是我见过的最好的之一。我没有找到一个GUI前端接近于VC的。

一旦你真正熟悉GDB,它就很棒了。使用它足够生气,并且你会变得非常熟练。我可以毫不费力地在程序中做所有你列出的事情。在我能熟练操作之前,我曾经在SSH连接到远程服务器上苦苦挣扎了一个月左右。但我再也不会回去了。

DDD确实很强大,但是它相当容易出现故障。我发现它经常会因为收到GDB无法理解的消息而冻结。它很好,因为它有一个gdb接口窗口,所以你可以看到正在进行的操作,并直接与gdb交互。由于某种原因,DDD在我的环境中不能用于远程X会话(这是一个真正的问题,因为我在Unix开发时坐在一个瘦客户机前),所以对我来说是不适用的。

KDevelop遵循典型的KDE风格,向用户公开了一切。我在KDevelop中也从未成功地调试过非KDevelop程序。

GNAT编程工作室(GPS)实际上是一个相当不错的GDB前端。它不仅仅管理Ada项目,因此如果你需要一个调试器,它也值得一试。

你可以使用Eclipse,但它非常臃肿,我与之合作过的许多经验丰富的Unix人员(包括我在内)对其界面并不感冒,而且它似乎占用了大量空间并且运行得很慢。


2
我只是想推广一下我的项目,gdbgui(https://github.com/cs01/gdbgui)。它采用客户端/服务器架构,因此可以很好地调试远程机器,无需X会话。它还具有终端直接与GDB交互,并具有显示数据结构的可视化功能,类似于DDD。 - cs01
基于经验的比较,包括优缺点。这正是这个问题所需要的。谢谢。 - Heath Raftery

29

我使用cgdb,它简单易用且很有用。


16

我经常使用DDD,一旦你学会了如何使用它,它就非常强大。但是有一件事情我要说的是,不要在WAN上使用它,因为它似乎会做很多不必要的屏幕更新。

另外,如果你没有拘泥于GDB,并且愿意花点钱,那么我建议尝试TotalView。它有点陡峭的学习曲线(可能更直观),但它是我在任何平台上使用过的最好的C++调试器,并且可以扩展以自定义方式内省您的对象(从而允许您将STL列表视为实际对象列表,而不是一堆令人困惑的内部数据成员等)。


我无法通过远程X使DDD正常工作;它在我的瘦客户端上只会崩溃并显示Xlib错误 :( - Adam Hawes
TotalView看起来是一个可行的替代品。我认为DDD并不比gdb curses界面更好。 - deft_code

9

我使用了KDbg(仅适用于KDE)。


4
KDbg并不仅限于KDE。 - Brent Bradburn
太棒了。我想知道它一直在哪里。 - edmz

8
类似于Eclipse GDB前端的是Emacs前端,与Emacs IDE紧密结合。如果您已经使用Emacs工作,您会喜欢它:

GDB Emacs前端


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