XCode调试器很糟糕,有替代品吗?

24
我从小就使用THINK C在Mac上编程。我从未遇到过像XCode自带的那样糟糕的调试器。
  • 它反应迟钝,同时在监视更多变量时变得更加缓慢甚至不稳定。
  • 当它崩溃时,由于其与编辑器集成在一起,我会失去源代码的撤销历史记录。
  • 它不能从集成中获益,因为源代码查看器无法用于步进:尝试通过单击左边缘选择一行会导致一个按钮从任何地方出现,在编辑器窗口中继续到该行,这首先与调试无关。可怕的UI和可怕的实现。
  • 一个被削弱的美化数据"摘要"语法不能将对象发送到表达式窗口。
  • 表达式窗口永远不知道任何上下文。
  • 我不能选择特定的线程进行调试,并且无法跳转到调用abort()的线程。

Mac OS 9的内核调试器比这个好。是时候放弃了。

有哪些适用于OS X的GDB独立前端?我发现http://ddd.darwinports.com/但很难找到它的好评或趣闻,或者其他选择。

对STL容器的支持对我来说是个重要的加分项。我无所谓Objective-C或Apple-anything。


2
如果你愿意直接使用gdb控制台,那么一些Xcode的缺点可以得到缓解。例如,可以通过在控制台中输入以下命令来转储长的NSString:p (void)CFShow(MyString) - Seva Alekseyev
2
+1 给 THINK C!(不过我更喜欢 THINK Pascal 的调试器)。 - Seth
3
你能不能把那个问题简化成“在Mac OS X上有哪些替代gdb的GUI界面?” - Georg Schölly
1
@Mr-sk:微软似乎一直做得很好的一件事情就是 Visual Studio 中的调试器。只要我记得(VC1.5),它一直都非常棒。几乎和 THINK Pascal 的调试器一样好 :P - Seth
这太不标准了,我给枚举赋值给整数时出错,它还无法识别函数等等... 真是可悲。 - Ramy Al Zuhouri
显示剩余2条评论
5个回答

2
我倾向于使用valgrind来处理与内存相关的错误; 当我想要回溯时,我会在终端中使用gdb; 对于所有其他问题,我使用记录和couts(如果它没有崩溃,并且没有内存损坏,则问题似乎更容易解决)。
承认,我不知道如何调试多线程代码。

我最近在SO上发现了一个技巧,可以更轻松地进行STL调试:cd ~ \n svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python \n $ cat ~/.gdbinit \n python \n import sys n
sys.path.insert(0, '/home/USERNAME/python/') \n from libstdcxx.v6.printers import register_libstdcxx_printers \n register_libstdcxx_printers (None) \n end \n
- baol

1

你试过使用Monodevelop吗?它可以构建和调试C代码,但不确定它如何处理obj-c。

如果你能让DDD工作,我已经在许多奇怪的平台上使用它并取得了良好的结果。DDD需要X11。


1

我也曾经有过使用XCode的经历,最终转向了Netbeans和Eclipse(仍然不确定哪一个更好,两者都有优点和缺点)。

这可能看起来是个奇怪的选择,但它们都提供了良好的C++支持、合理的调试器集成和良好的项目管理选项。我喜欢重构工具和源代码版本控制集成。请注意,它们不像Visual Studio 6那样快速和干净。

和其他许多人一样,我不喜欢Objective-C,并且已经厌倦了为每个平台编写不同的环境/框架(我每天使用Linux和OSX,偶尔使用Windows)。Netbeans和Eclipse对于可移植性来说是一个大加分。它们还支持我有时用于较小项目的其他语言(比如Python)。


非常感谢!我已经安装了Eclipse,所以我只需要安装C/C++包。然而,调试器无法处理64位二进制文件。问题似乎出在“二进制解析器”上,在网上查找,似乎应该有一个“Mach-O 64解析器”选项,除了常规的Mach-O。你知道我该如何安装它吗? - Potatoswatter
我不知道。很抱歉,由于我的设置,我只用它来开发OSX上的32位应用程序。我在OSX上开发,然后使用简单的makefile在Linux 64位上进行编译以供生产使用..抱歉。如果其他方法都不起作用,也许您可以在32位中进行调试,然后以相同的方式使用makefile在64位中进行编译?无论如何,我很想学习如何使Eclipse的C ++调试器与Snow Leopard上的64位应用程序配合使用。如果您找到方法,请发布。有趣的问题-很高兴得知我不是唯一一个不喜欢XCode的人...谢谢。 - cjcela

0

我想补充一下匿名用户所说的,最近我在SO上也发现了一个更容易进行STL调试的技巧:

$ cd ~
$ svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
$ cat ~/.gdbinit
python
import sys
sys.path.insert(0, '/home/USERNAME/python/')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

这里有一个类似建议的来源:https://dev59.com/WkXRa4cB1Zd3GeqPustA 但是,看起来我需要升级GDB... - Potatoswatter

0

我刚刚发现了cgdb,这是一个基于curse的gdb前端。也许你想试试,尽管它似乎有点过时。(Jan'10)


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