【问题标题】:Is there a C++ gdb GUI for Linux? [closed]是否有适用于 Linux 的 C++ gdb GUI? [关闭]
【发布时间】:2010-09-09 21:23:45
【问题描述】:

简而言之:有谁知道 gdb 的 GUI 可以使它与您在较新版本的 Visual C++ 中获得的功能集相当或接近?

详细说明:作为一个在 Windows 中花费大量时间编程的人,每当我必须在 Linux 中编写 C++ 代码时,我发现的一个较大的绊脚石是使用命令行 gdb 调试任何东西所花费的时间是我的几倍。它在 Visual Studio 中确实如此,并且通过实践似乎并没有变得更好。有些事情只是更容易或更快地以图形方式表达。

具体来说,我正在寻找一个 GUI:

  • 处理所有基础知识,例如单步执行和进入代码、监视变量和断点
  • 了解并能够显示复杂和嵌套 C++ 数据类型的内容
  • 在显示参数类型等相关信息的同时,不会被模板化代码和数据结构所迷惑,最好能够智能地单步执行
  • 可以处理线程应用程序并在不同线程之间切换以单步执行或查看状态
  • 除了在 gdb 中启动程序之外,还可以处理附加到已启动的进程或读取核心转储

如果不存在这样的程序,那么我想听听人们在使用至少满足某些要点的程序方面的经验。 有人有什么建议吗?

编辑:
列出可能性是很好的,我会尽我所能,但如果你能在你的回复中包括它会更有帮助:
(a) 您是否实际使用过此 GUI,如果使用过,您对此有什么正面/负面反馈。
(b) 如果您知道,上面提到的哪些功能是/不支持的

列表很容易获得,像这样的网站非常棒,因为您可以了解人们使用应用程序的个人体验。

【问题讨论】:

标签: c++ linux gdb debugging


【解决方案1】:

您不会发现 任何东西 覆盖 GDB,它可以与 Visual Studio 调试器的原始功能相媲美。它太强大了,而且它在 IDE 中集成得也很好。

对于 Linux 替代方案,如果您喜欢免费软件,请尝试 DDD。

【讨论】:

  • WinDBG 远远优于 Visual Studio 提供的。 Visual Studio 调试器位于与 WinDBG 相同的架构之上。话虽如此,在将 GDB 与 Windbg 进行比较时,它没有什么可问的。一个比 DDD 更好的图形调试器会很棒。 Eclipse CDT 是一个不错的选择。我认为有一个 KDE 用户界面
  • 哦,看。一个完全不支持就提出索赔的答案。我也觉得奇怪的是没有回答问题的答案被接受了。
  • 对于任何来这里寻找真正答案的人,都知道 ddd 是垃圾。我发现的最好的 Linux 调试器 GUI 是 IDA,它不是免费软件。
  • 尽量回答问题,或者什么也不说。两者都用过,Visual Studio 的功能更丰富,但 DDD 足够好,我不会错过 VS。可悲的是,DDD 已经过时了。
  • 这篇文章需要更新/改进。 Qt Creator 很棒,与 Visual Studio 不相上下。
【解决方案2】:

可以单步执行的内容将在很大程度上受到 g++ 生成的调试信息的限制。 Emacs 为 gdb 提供了一个接口,让您可以通过工具栏/菜单控制它并在单独的窗口中显示数据,以及直接键入 gdb 命令。 Eclipse 的 CDT 提供了类似的工具。我听说过 Anjuta 和 Code::Blocks,但从未使用过。

【讨论】:

    【解决方案3】:

    查看 Eclipse CDT 项目。它是一个面向 C/C++ 开发的 Eclipse 插件,包括一个功能相当丰富的调试透视图(在幕后使用 GDB)。它可在多种平台上使用。

    【讨论】:

      【解决方案4】:

      DDD 是 gdb 的 GNU 前端:http://www.gnu.org/software/ddd/

      【讨论】:

        【解决方案5】:

        KDevelop 运行良好。

        【讨论】:

          【解决方案6】:

          最新版本的 Geany 支持它(不过仅在 Linux 上)

          【讨论】:

            【解决方案7】:

            gdb -tui 如果你想要一些图形用户界面的东西,但仍然是基于字符的。

            【讨论】:

            • 您也可以在 gdb 中使用“-”命令进入 TUI(文本用户界面)模式。返回命令提示符是 Ctrl-X Ctrl-A。在 TUI 模式下,向上、向下、向左和向右移动通过源。使用 Ctrl-P、Ctrl-N、Ctrl-F 和 Ctrl-B 在命令行历史记录中导航。
            • 这正是我想要的。 gdb 命令行的强大功能以及一些有用的视图,这些视图会随着我的移动而更新。
            • 类固醇上的 .gdbinit 为您提供了一个非常令人印象深刻的基于字符的 GUI,颜色为:github.com/cyrus-and/gdb-dashboard
            • 我很喜欢gdb-dashboard,但也不得不提voltron
            • @Barry 谢谢。对于任何好奇的人,这里有一个链接:github.com/cs01/gdbgui。它具有类似于 DDD 的数据结构显示、客户端/服务器架构,无需 X 转发即可轻松调试远程机器,以及探索复杂变量的能力等。
            【解决方案8】:

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

            另外,如果您没有与 GDB 配对并且不介意花一点钱,那么我会尝试 TotalView。它有一些陡峭的学习曲线(它肯定会更直观),但它是我在任何平台上使用过的最好的 C++ 调试器,并且可以扩展为以自定义方式内省您的对象(因此允许您查看STL列表作为一个实际的对象列表,而不是一堆令人困惑的内部数据成员等)

            【讨论】:

            • 我根本无法让 DDD 在远程 X 上工作;只是在我的瘦客户端上因 Xlib 错误而崩溃:(
            • totalview 看起来是一个可行的选择。我不认为 DDD 比 gdb curses interface 更好。
            【解决方案9】:

            作为熟悉 Visual Studio 的人,我已经查看了几个开源 IDE 来替换它,而 KDevelop 是最接近 Visual C++ 人员可以坐下来开始使用的 IMO。当您在调试模式下运行项目时,它使用 gdb,但 kdevelop 几乎可以处理整个事情,因此您不必知道它是 gdb;您只是单步执行或将监视分配给变量。

            不幸的是,它仍然不如 Visual Studio 调试器。

            【讨论】:

              【解决方案10】:

              Eclipse CDT 将提供与使用 Visual Studio 相当的体验。我每天都使用 Eclipse CDT 来编写代码以及调试本地和远程进程。

              如果您不熟悉使用基于 Eclipse 的 IDE,那么 GUI 需要一点时间来适应。但是,一旦您了解了 Eclipse 独有的 GUI 理念(例如透视图),使用该工具就会成为一种很好的体验。

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

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

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

              【讨论】:

              • 支持读取核心转储。 (它被称为事后调试器。)
              • 我在 Eclipse CDT 调试方面的经验比在 Visual Studios 方面要好。不过,我并没有给 MSVC 太多机会。
              • 我认为 QtCreator 应该与 Eclipse 一起提及,因为它具有可比性。
              【解决方案11】:

              我已经为 gdb 尝试了几种不同的 gui,并发现 DDD 是其中更好的。 虽然我无法评论其他针对 linux 的非 gdb 产品,但我在其他平台上使用了许多其他调试器。

              gdb 完成了您愿望清单中的大部分工作。 DDD 对他们提出了更好的要求。例如,线程切换变得更简单。设置断点和你想象的一样简单。

              您还可以看到一个 cli 窗口,以防您想做一些不明确的事情。

              在我使用过的任何其他调试器中脱颖而出的 DDD 的一个特性是数据“绘图”。这允许您将结构、对象和内存显示和排列为可拖动的框。双击指针将打开取消引用的数据,并带有返回父级的可视链接。

              【讨论】:

              • ddd 是否适用于带参数的程序?我无法让它传递参数...
              • 如果我没记错的话,DDD 可以给你一个直接连接到 GDB 的控制台窗口。在 GDB 控制台中,您可以使用“set args xyz abc”命令设置命令行参数。
              【解决方案12】:

              我使用了 KDbg(仅在 KDE 下工作)。

              【讨论】:

              • KDbg 仅限于 KDE。
              • 太棒了。我想知道它一直在哪里。
              【解决方案13】:

              您是否尝试过 gdb -w 与 cygwin gdb。 它应该有一个运行良好的windows界面。

              我发现的唯一问题是,在我现在的机器上,它直到我安装了 ddd 之后才以这种方式运行。我怀疑它需要在我安装 ddd 时安装的 tcltk。

              【讨论】:

                【解决方案14】:

                与 eclipse gdb 前端相似的是 emacs 前端,它与 emacs IDE 紧密相关。如果您已经使用 emacs,您会喜欢它:

                GDB Emacs Frontend

                【讨论】:

                  【解决方案15】:

                  您没有提及您使用的是 Windows 还是 UNIX。

                  在 UNIX 系统上,KDevelop 很好,但我使用 KDbg,因为它易于使用,并且还可以与非 KDevelop 开发的应用程序一起使用。

                  Eclipse 在两个平台上都很好。

                  在 Windows 上,有一个名为 Wascana Desktop Developer 的很棒的包,它是 Eclipse CDT 和 MinGW 全部打包并预先配置好,以最大限度地减少痛苦。这是我在 Windows 上开发 GNU 代码时发现的最好的东西。

                  我用过所有这些调试器,但没有一个比 MS Dev Studio 好。 Eclipse/Wascana 可能是最接近的,但它确实有一些限制,比如你不能进入 DLL,而且它在检查变量方面做得不够好。

                  【讨论】:

                    【解决方案16】:

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

                    一旦你真正习惯了 GDB,它就很棒。在愤怒中使用它,你会变得非常熟练。我可以毫不费力地在一个程序周围做你列出的所有事情。在我精通之前,确实需要一个月左右的时间才能通过 SSH 链接连接到远程服务器。不过我永远不会回去。

                    DDD 确实很强大,但也有很多问题。我发现当它收到来自 GDB 的消息时,它经常冻结。这很好,因为它有一个 gdb 界面窗口,因此您可以看到正在发生的事情并直接与 gdb 交互。由于某种原因,无法在我的环境中的远程 X 会话上使用 DDD(这是一个真正的问题,因为我在做 Unix 开发时坐在瘦客户端上),所以它不适合我。

                    KDevelop 遵循典型的 KDE 风格,向用户展示一切。我也从来没有在 KDevelop 中调试非 KDevelop 程序的运气。

                    Gnat Programming Studio (GPS) 实际上是一个很好的 GDB 前端。它不只是管理 Ada 项目,因此如果您需要调试器,值得一试。

                    您可以使用 Eclipse,但它的重量很重,而且与我共事过的许多经验丰富的 Unix 人员(包括我在内)都不太关心它的界面,这不仅是 STFU,而且不会妨碍您. Eclipse 似乎也占用了很多空间,像狗一样跑。

                    【讨论】:

                    • 只是想插入我的项目 gdbgui (github.com/cs01/gdbgui)。它是一个客户端/服务器架构,因此可以很好地调试远程机器而无需 X 会话。它还有一个直接与 GDB 交互的终端,并具有显示数据结构的视觉效果,类似于 DDD。
                    • 根据经验比较优缺点。正是这个问题所需要的。 ty
                    【解决方案17】:

                    我用cgdb,简单好用

                    【讨论】:

                      【解决方案18】:

                      如果您在 Visual Studio 下寻找 gdb,请查看 WinGDB

                      【讨论】:

                        【解决方案19】:

                        在过去的 15 个月中,我使用了洞察力(FC6 附带)。它不是很好,它是用 Tcl/Tk 编写的,但它简单实用。 DDD 具有相似的质量/实用性,但使用起来有些困难(各种 GUI 陷阱和遗漏)。我还尝试将 gdb 与我的 IDE SlickEdit 集成。它工作正常(我玩了大约 4 个小时),但我不喜欢 GUI 上下文切换。我希望我的 IDE 在调试时保持不变;在 Windows 上,我使用 SlickEdit 进行 IDE 和 Visual Studio 调试器进行调试。因此,从 3:Insight、DDD 和 SlickEdit 来看,Insight 是我的第一选择,我使用它 >95% 的时间,命令行 gdb 和 DDD 占另外 5%。如果有机会,我会在某个时候评估 Eclipse,我的工作 PC 似乎没有足够的 RAM(仅 1GB)来相当好地运行 Eclipse。

                        我还听到了很多对 TotalView 的赞誉,包括在工作面试中的第一手。我在 2008 年底获得了我们公司的评估,但最后我们没有继续,因为 gdb 足以满足我们的需求;它是免费且无处不在的。

                        【讨论】:

                          【解决方案20】:

                          Qt Creator 似乎是个好东西。一位同事向我展示了一种设置调试的方法:

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

                          这对于调试我已经编译的应用程序来说似乎有点多,但这是值得的。调试器以与 Visual Studio 类似的方式显示线程、堆栈和局部变量,甚至使用许多相同的键盘快捷键。它似乎很好地处理模板,至少 std::string 和 std::map。似乎支持附加到现有进程和核心转储,但我尚未对其进行测试。

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

                          【讨论】:

                            【解决方案21】:

                            现在,Qt Creator-on-Linux 肯定与 Visual Studio-on-Windows for C++ 相提并论。我什至会在调试器方面说得更好。

                            【讨论】:

                              【解决方案22】:

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

                              更新:新链接。

                              【讨论】:

                              • Absolutely fabulous,也支持 apt: 'apt-get install nemiver'。我唯一的问题是由于“未找到包 gconf-2.0”而从 repo 构建失败。
                              • 界面非常清晰易读,但在使用界面功能 v0.9.6 时有时会崩溃。它还接受调试的应用程序参数,我仍然不能让 ddd 做。
                              • 在 Fedora 30 上也可用(至少)。我只是偶然发现了这个问题和 nemiver。
                              【解决方案23】:

                              Code:Blocks C++ IDE 有一个图形包装器,具有一些您想要的功能,但没有 VS 的强大功能。

                              【讨论】:

                                【解决方案24】:

                                使用 www.zero-bugs.com/ 零调试器,它需要 gcc 的 C++0x 支持

                                【讨论】:

                                • www.zero-bugs.com/ 网站已关闭
                                【解决方案25】:

                                此列表中缺少一个非常高效的 IDE(我已在许多 C/C++ 项目中使用它,没有任何问题):Netbeans

                                【讨论】:

                                • 我非常喜欢 cgdb,因为我已经习惯了它,但 Netbeans 是 VS 的一个很好的垫脚石。
                                【解决方案26】:

                                VisualGDB 是另一个 Visual Studio 插件,用于在 linux 和嵌入式平台上开发和调试应用程序。

                                【讨论】:

                                  【解决方案27】:

                                  你看过DS-5 debugger吗?

                                  有一个付费版本,其中包含许多有用的功能,但您也可以免费使用社区版(这对于嵌入式系统也非常有用)。

                                  在使用 eclipse 在真实设备上调试 Android 应用程序时,我对这个工具有很好的体验。

                                  【讨论】:

                                  【解决方案28】:

                                  我正在寻找一个调试器来逐步执行正在运行的程序。说:附上。该程序是用 Eclipse 构建的,但由于可能存在一些多线程障碍,因此没有喜欢的源文件。什么都没有。

                                  我对 NetBeans 非常满意。

                                  • [debug] 来自菜单 -> Attach Deugger...
                                  • 进程选择了要调试的进程
                                  • 作为项目[新项目]

                                  现在窗口消失了,你什么也看不见。脱离过程。阅读方块“停止”会有所帮助。

                                  • 从项目中导入源代码,例如文件夹。 ".../MyProject/src
                                  • 现在它出现在您的项目中,您可以设置断点。
                                  • 再次附加调试器
                                  • 选择要调试的进程。
                                  • 如果程序到达下一个断点,调试器应该停止。

                                  转到 [window] -> [Debugging] -> 你的窗口会变得舒适吗?

                                  【讨论】:

                                    猜你喜欢
                                    • 2011-10-13
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2011-08-05
                                    • 2020-11-07
                                    • 2015-12-31
                                    • 2010-09-06
                                    • 1970-01-01
                                    相关资源
                                    最近更新 更多