Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GUI调试器和终端调试器之间的区别_C++_Debugging - Fatal编程技术网

C++ GUI调试器和终端调试器之间的区别

C++ GUI调试器和终端调试器之间的区别,c++,debugging,C++,Debugging,在Eclipse中,GUI调试器有哪些优点?使用命令行调试器(如gdb)有哪些优点?工业界是否使用命令行调试器?如果是这样,人们在什么情况下使用命令行调试器?命令行调试器有助于调试远程系统(尤其是在连接速度较慢时),它也适用于低性能系统或没有Xserver/graphic卡的系统。CLI调试器还用于快速分析或核心转储和SIGSEGVs(启动速度更快)。命令行调试器更具便携性,几乎可以安装在每个系统上(也可以轻松安装,甚至可以从网络/闪存驱动器启动) 我认为命令行可以用于没有源代码的程序,图形调试

在Eclipse中,GUI调试器有哪些优点?使用命令行调试器(如gdb)有哪些优点?工业界是否使用命令行调试器?如果是这样,人们在什么情况下使用命令行调试器?

命令行调试器有助于调试远程系统(尤其是在连接速度较慢时),它也适用于低性能系统或没有Xserver/graphic卡的系统。CLI调试器还用于快速分析或核心转储和SIGSEGVs(启动速度更快)。命令行调试器更具便携性,几乎可以安装在每个系统上(也可以轻松安装,甚至可以从网络/闪存驱动器启动)

我认为命令行可以用于没有源代码的程序,图形调试器更适合于具有复杂数据结构/类的项目


另一种情况是命令行调试器更容易自动化,例如,我有一个shell脚本,它使用gdb对程序进行完整的调用图记录。自动执行图形调试器是非常困难的。

我通常使用gdb,但我能想到的一些好处是:

  • 作为命令行,在远程系统上调试二进制文件就像打开ssh连接一样简单
  • 强大的脚本支持,并且能够在每个断点上运行许多命令(请参阅
    continue
    关键字)
  • 启动时间更短,开发周期更快
  • 复制可复制的命令和可定义的函数,使您可以更轻松地重复常用命令(&P)
  • gdb还讲一个定义良好的协议,因此您可以调试运行在许多模糊硬件和内核上的代码
  • 从长远来看,键入简短的命令比使用GUI更短、更有效(我认为)
但是,如果您位于以前从未使用过的系统或运行时旁边,那么从一开始就可以更容易地开始使用可视化调试器。此外,将调试器与IDE紧密集成(如果您使用IDE)可以大大提高工作效率


可视化调试器和命令行调试器不必完全分开,gdb有可视化前端,比如DDD。(不过我不使用DDD,因为它感觉非常笨拙和过时。尽管如此,它确实存在。XCode还包装了gdb以支持调试)

基本上不可能根据调试器的显示进行有意义的比较。喜欢命令行的人可能会使用文本模式,命令驱动的调试器。喜欢GUI的人可能会使用图形化、菜单驱动的调试器


几乎只有在调试窗口系统时,才会有真正强烈的技术动机。例如,如果您试图调试的是X服务器本身,则使用依赖于具有功能的X服务器的调试器不会很好地工作。

您可以为终端调试器提供前端(它们有自己的用途,请参阅答案)。反之亦然。使用gdb时,我个人的喜好是使用命令行(有时也使用emacs前端),因为您很快就会习惯它。您提到命令行不需要源代码。你能详细解释一下吗?@foboi1122,即使没有该程序的来源,它们也可以工作。许多图形调试器也可以在这种情况下工作,但我更喜欢在这种情况下使用CLI调试器。