【问题标题】:XCode debugger sucks; alternatives? [closed]XCode 调试器很烂;备择方案? [关闭]
【发布时间】:2011-01-02 16:52:09
【问题描述】:

我从小就使用 THINK C 在 Mac 上编程。我从来没有使用过像 XCode 附带的调试器那样糟糕的调试器。

  • 它没有响应,并且在观察更多变量时会进一步陷入困境并变得不稳定。
  • 当它崩溃时,我会丢失源的撤消历史记录,因为它已与编辑器集成。
  • 但它并没有从集成中受益,因为源查看器无法用于步进:尝试通过单击左边距来选择一行会使一个按钮从无处出现,从而导致程序继续 em> 到该行,在编辑器窗口中,它首先不应该与调试有关。糟糕的用户界面和糟糕的实现。
  • 无法将对象发送到“表达式”窗口的笨拙的漂亮数据“摘要”语法。
  • 他的“表达式”窗口从不知道任何类型的上下文。
  • 据我所知,无法选择要调试的特定线程,也不会跳转到调用 abort() 的线程。

Mac OS 9kernel 调试器比这更好。是时候放弃了。

哪些 GDB 独立前端可在 OS X 上运行?我找到了http://ddd.darwinports.com/,但很难找到赞美或轶事,或其他替代方案。

对 STL 容器的支持对我来说是一大优势。我完全不在乎 Objective-C 或 Apple 的任何东西。

【问题讨论】:

  • 你想要什么,mac 上的视觉工作室?在 x86 上编写 GCC/GDB 也会遇到同样的问题。
  • 如果你愿意直接使用 gdb 控制台,一些 Xcode 的缺点可以得到缓解。例如,可以在控制台中使用 p (void)CFShow(MyString) 来转储长 NSString。
  • +1 为 THINK C! (不过我更喜欢 THINK Pascal 的调试器)。
  • 你不能把这个问题缩短为“Mac OS X 上的 gdb 有哪些替代 GUI?”
  • @Mr-sk:微软似乎总是做对的一件事是 Visual Studio 中的调试器。只要我记得(VC1.5),它就一直很棒。几乎和 THINK Pascal 的调试器一样好:P

标签: c++ xcode macos


【解决方案1】:

你尝试过monodevelop吗?它可以构建和调试 C 代码,不显示它如何处理 obj-c。

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

【讨论】:

    【解决方案2】:

    我在使用 XCode 时也有过同样的经历,最后改用 Netbeans 和 Eclipse(仍然不确定我更喜欢哪一个,两者各有优缺点)。

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

    和这里的许多其他人一样,我不喜欢 Objective-C,并且非常厌倦必须为我编写的每个平台学习不同的环境/框架(我每天使用 Linux 和 OSX,有时使用 Windows)。 Netbeans 和 Eclipse 都是可移植性的一大优势。它们还支持我有时用于小型项目的其他语言(想到 Python)。

    【讨论】:

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

    我倾向于使用 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 (我将把它作为一个答案,因为它在评论中看起来是乱码)
    【解决方案4】:

    我补充一下 anon 所说的,我最近在 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
    

    【讨论】:

    【解决方案5】:

    我刚刚发现了cgdb,这是一个基于诅咒的 gdb 前端。也许您会想尝试一下,尽管它似乎有点过时了。 (10 年 1 月)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 2019-06-04
      • 2021-06-12
      • 1970-01-01
      • 2010-12-27
      • 2011-07-15
      • 2012-10-16
      相关资源
      最近更新 更多