【问题标题】:Trouble debugging C++ using Eclipse Galileo on Mac在 Mac 上使用 Eclipse Galileo 调试 C++ 时遇到问题
【发布时间】:2010-11-19 05:01:01
【问题描述】:

我正在尝试在运行 Mac OS X v10.5 (Leopard) 的 MacBook Pro 上使用 Eclipse Galileo 调试 C++ 代码。这是我第一次尝试这个。我有一个复杂的 C++ 程序要调试,但为了测试,我只是尝试调试并逐步执行以下操作:

#include <iostream>
using namespace std;

int main()
{
  int x = 0;
  cout << x << endl;

  x = 54;
  cout << x << endl;

  return 0;
}

我点击了调试图标,告诉它使用GDB (DSF) Create Process Launcher 并开始单步调试代码。我希望能够监控 x 的值,所以我打开了变量窗口并进行了观察。最初,它是 4096 - 大概是一些垃圾值。当我点击下一行时,它显示了该值,它现在显示以下错误:

Failed to execute MI command:
-var-update 1 var1
Error message from debugger back end:
Variable object not found

我似乎无法弄清楚或绕过它。一些谷歌搜索结果完全没有任何线索。


解决方案:正如下面drhirsch 指出的,使用标准创建进程启动器而不是GDB 创建进程启动器。 (这实际上是一种解决方法,而不是真正的解决方案,但它至少对我们两个人有用。)

【问题讨论】:

  • 您是否使用调试信息进行编译,而不是剥离可执行文件?
  • 我正在调试中构建,在项目设置中看不到任何类似的东西,所以我很确定不是这样。另外,它实际上在调试期间确实可以编辑并继续正常工作。不过,谢谢你的想法。
  • 嗨,我遇到了同样的错误,您如何在屏幕上显示错误输出“执行失败..”?我什至没有任何信息....
  • 好的,目前,使用 7.1 版的 /opt/local/bin/fsf-gdb 似乎可以解决问题!我没有对它进行广泛的测试,但是我可以在非常不同的函数中使用断点,并且程序在调试时停在那里

标签: c++ eclipse macos gdb galileo


【解决方案1】:

根据我的经验,gdb/dsf 启动器仍然无法使用。我也不能让它显示变量,它似乎仍然很麻烦。

您是否尝试过标准创建流程启动器?对我来说,这很好用。

【讨论】:

  • 你知道,老实说,我尝试切换到那个并得到了完全不同类型的应用程序错误。然而,根据你的建议,我又试了一次,whaddaya 知道......它有效!谢谢!
  • 从那时起我可能已经重新启动了 Eclipse。这可能就是原因。
【解决方案2】:

除了使用 Eclipse 以外的 IDE 之外,如果没有可靠的好答案,这似乎仍然是一个问题。

我尝试了 DSF Create Process Launcher 和 Standard Create Process Launcher 变体,但都没有获得成功的调试体验。 GDB 调试器以任何一种方式启动,但没有正确处理断点(在某些情况下未解决),并且几乎无法检查/跟踪任何变量值。

这是我正在使用的软件:

  • Eclipse 3.5.2 (Galileo),64 位 Cocoa 版本
  • Eclipse C/C++ 开发工具 6.0.2.2
  • Mac OS X 10.6.3(雪豹)
  • GDB 6.3.5(Xcode 附带的 Apple 版本)

我还尝试从源代码构建 GDB 7.1,因为从 7.0 开始,它应该具有原生 x86/x86_64 Darwin 支持。它构建良好并且可以从命令行启动,但是当我尝试从 Eclipse 启动它时会出现各种问题。这些似乎与 Apple 最近对任务门控机制如何允许调试器连接到进程所做的更改有关。以下错误是其中的典型错误:

Target request failed: Unable to find Mach task port for process-id 88283:
(os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8)).

网络上的各种消息来源表明,Apple 在 GDB 6.3.5 中使用了他们自己的特殊补丁来支持 Mac OS X,但这是一个非常古老的代码库(2004 年)。相反,其他 Web 资源表明 Eclipse DSF 调试器框架需要 GDB 命令,这些命令仅出现在 GDB 6.6(大约 2006 年?)中。

我浏览了所有与 Eclipse 相关的论坛,但没有发现任何解决此问题的迹象。似乎 Eclipse CDT 开发团队中几乎没有人使用 Mac OS X,因此他们很少费心在这个平台上测试他们的更改。

编辑更新:除上述内容外,我还使用开发人员构建的 Eclipse Helios 3.6 RC3(IDE for C/C++ 开发人员),其中包括 CDT 7.0。遇到了所有相同的报告问题。 在 Mac OS X Snow Leopard 上调试 Eclipse CDT 仍然无法正常工作。

对于我上面报告的场景,有没有人知道一些不同的和/或基于 Eclipse 的可靠解决方案?

【讨论】:

  • 乔尔,您可能想将此作为您自己的问题发布。就我的目的而言,drhirsch 建议仅使用标准启动器对我来说效果很好。两个赞成票表明它可能也帮助了其他人,但根据此页面上的反馈,它似乎并没有帮助所有人。也许这个话题值得像您这样仍然遇到问题的人提出另一个问题。
  • @speedmetal - 感谢您的建议;我可能会这样做,因为我的问题仍然存在——我一直在使用 XCode。不过,我可能会先尝试在其中一个 Eclipse 论坛上发帖。
  • 我也遇到了同样的问题,你找到新的解决方案了吗?
  • 我正在考虑以下解决方法;在虚拟机中安装 linux ubuntu 或类似软件,然后激活远程调试,以便在那里调试您的程序。它应该可以工作,虽然不是一个非常优雅的解决方案
  • 我还没有找到解决办法。大约 1-2 个月前再次查看,但我发现没有任何效果。我仍然坚持在 Mac OSX 上使用 Xcode。
【解决方案3】:

我在Ubuntu 的多个版本的 Eclipse 上遇到过类似的问题。我经常使用的一种解决方案是使用GDB 6.6 版而不是最新版本。

【讨论】:

    【解决方案4】:

    以后,您还可以尝试使用Xcode(仅用于调试)- 将所有文件拖入以将它们导入新项目,但不要编译。相反,打开调试器窗口并附加到您正在运行的进程。

    【讨论】:

    • 我会说使用两个IDE不太实用
    【解决方案5】:

    同样的问题,但我可能已经找到了方法。在 Eclipse 中,在项目属性下,在运行/调试设置中,我删除了启动配置并再次运行调试器。

    此时一切正常,尽管如果我修改它至少需要 10 秒才能启动调试器。我认为这与调试属性和启动器配置的组合有关。

    【讨论】:

      【解决方案6】:

      更新到已发布的 Eclipse 3.6 (Helios) 版本并使用 DSF/GDB Create Launcher。为了将 DSF/GDB 框架的功能对等性提升到 Eclipse 3.6 (Helios) 的可用水平,我们做了大量工作。现在使用 Eclipse CDT 3.6 Helios 在 OS X 10.5 和 10.6 上调试工作正常。

      【讨论】:

      • 嗨,迈克,您能告诉我们您使用的是哪种调试设置吗?
      【解决方案7】:

      好的,目前,使用 7.1 版的/opt/local/bin/fsf-gdb 似乎可以解决问题!我没有对它进行广泛的测试,但是我可以在非常不同的函数中使用断点,并且程序在调试时会停在那里。

      【讨论】:

        【解决方案8】:

        您可以按照页面GDB on OS X Mavericks and Xcode 5的说明进行操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-15
          • 1970-01-01
          • 2023-03-25
          • 2013-11-01
          • 2022-09-28
          • 1970-01-01
          相关资源
          最近更新 更多