3

我正在尝试在运行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在下面指出的,使用 Standard Create Process Launcher 而不是 GDB Create Process Launcher。(这实际上是一种解决方法,而不是真正的解决方案,但它至少对我们两个人有效。)

4

8 回答 8

5

根据我的经验,gdb/dsf 启动器仍然无法使用。我也无法让它显示变量,它似乎仍然非常有问题。

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

于 2009-08-13T07:47:49.807 回答
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 6.6(大约 2006 年?)中出现的 GDB 命令。

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

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

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

于 2010-06-03T23:58:02.263 回答
1

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

于 2011-04-15T19:57:32.790 回答
0

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

于 2009-10-09T05:45:47.810 回答
0

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

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

于 2010-02-13T19:06:23.353 回答
0

更新到已发布的 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 上调试工作得很好。

于 2010-07-07T15:25:59.763 回答
0

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

于 2011-03-05T09:04:43.713 回答
0

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

于 2014-02-21T19:12:41.657 回答