在Mac上使用Eclipse Galileo调试C++代码时出现问题

3

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

#include <iostream>
using namespace std;

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

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

  return 0;
}

我点击了调试图标,告诉它使用 GDB (DSF) 创建进程启动器并开始逐步执行代码。我想能够监视 x 的值,所以我打开了变量窗口并观察。最初它是 4096 - 可能是一些垃圾值。当我按下下一行时,它显示了该值,现在显示以下错误:
Failed to execute MI command:
-var-update 1 var1
Error message from debugger back end:
Variable object not found

我似乎无法弄清楚这个问题或解决它。进行了几次谷歌搜索,却毫无头绪。


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

你是否使用调试信息编译而没有剥离可执行文件? - steve
我正在使用Debug模式构建,但在项目设置中没有看到类似的东西,所以我很确定那不是问题所在。此外,在调试期间它实际上可以很好地进行编辑和继续操作。谢谢你的想法。 - Eben Geer
嗨,我一直在收到相同的错误。你怎么在屏幕上输出错误信息“执行失败...”?我甚至没有任何信息... - Open the way
好的,目前使用版本为7.1的/opt/local/bin/fsf-gdb似乎可以解决问题!虽然我没有进行过详尽的测试,但我可以在非常不同的函数中使用断点,并且程序在调试时会在那里停止。 - Open the way
8个回答

5

以我的经验,gdb/dsf启动器仍然相当难以使用。我无法显示变量,它似乎仍然存在很多错误。

你试过标准的创建进程启动器吗?对我来说,这个方法很有效。


你知道吗,我曾经尝试过切换到那个版本,但是出现了完全不同的应用程序错误。然而,在你的建议下,我又尝试了一次,结果竟然成功了!谢谢! - Eben Geer
我可能自那以后重新启动了Eclipse。这可能是原因。 - Eben Geer

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(Snow Leopard)
  • GDB 6.3.5(随Xcode一起提供的苹果版本)

我还尝试从源代码构建GDB 7.1,因为自7.0以来,它应该具有本机x86 / x86_64 Darwin支持。它编译良好,并且可以从命令行启动,但是当我尝试从Eclipse启动它时,它会出现各种问题。这些问题似乎与Apple最近更改的taskgated机制有关,用于允许调试器连接到进程。以下是其中一个典型错误:

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)).

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

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

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

有人知道不同的东西和/或可靠的基于Eclipse的解决方案来解决我上面报告的情况吗?


Joel,你可能想把这个问题发表为自己的问题。对于我的目的,drhirsch建议简单地使用标准启动器对我来说已经足够了。两个赞表明它可能也帮助了其他人,但根据这个页面上的反馈,它似乎并没有帮助到每个人。也许这个话题值得由像你这样仍然遇到这个问题的人提出另一个问题。 - Eben Geer
@speedmetal - 感谢建议; 我可能会尝试这样做,因为问题对我来说仍然存在 - 我一直在使用XCode。不过,我可能会先在Eclipse论坛上发布帖子。 - Joel Hoff
我也遇到了同样的问题,你找到新的解决方案了吗? - Open the way
我在考虑以下的解决方法:在虚拟机中安装Linux Ubuntu或类似系统,然后启用远程调试,这样你的程序就可以在那里进行调试。这样做应该可行,但不是非常优雅的解决方案。 - Open the way
我仍然没有找到解决方案。大约1-2个月前再次查找,但我没有找到任何有效的方法。我仍然被困在Mac OSX上使用Xcode。 - Joel Hoff

1

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


0
同样的问题,但我可能已经找到了解决方法。在Eclipse中,在项目属性下,在运行/调试设置中,我删除了启动配置并再次运行了调试器。
此时一切都正常工作,尽管如果我进行修改,启动调试器至少需要10秒钟。我认为这与调试属性和启动器配置的组合有关。

0

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


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上调试现在可以正常工作。


嗨Mike,你能告诉我们你正在使用哪个调试设置吗? - Open the way

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

我认为使用两个集成开发环境并不是很实际。 - Open the way

0

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