我正在尝试使用运行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)创建进程启动器并开始逐步执行代码。我希望能够监控x的值,所以我打开了Variables窗口并观察了。最初,它是4096 - 可能是一些垃圾价值。一旦我点击下一行,它显示了值,它现在显示以下错误:
Failed to execute MI command:
-var-update 1 var1
Error message from debugger back end:
Variable object not found
我似乎无法弄清楚这一点或绕过它。一些谷歌搜索结果发现骨干,甚至没有带头的暗示。
解决方案:正如下面drhirsch所述,使用标准创建流程启动器而不是GDB创建流程启动器。 (这实际上是一种解决方法而不是真正的解决方案,但它至少对我们两个人有用。)
答案 0 :(得分:5)
根据我的经验,gdb / dsf启动程序仍然无法使用。我也不能让它显示变量,它似乎仍然非常错误。
您是否尝试过标准创建流程启动器?对我来说这很好。
答案 1 :(得分:2)
除了使用Eclipse以外的IDE之外,这似乎仍然是一个没有可靠答案的问题。
我尝试了DSF创建流程启动器和标准创建流程启动器变体,但两者都没有带来成功的调试体验。 GDB调试器以任一方式启动,但断点未正确处理(在某些情况下未解决),并且几乎不能检查/跟踪变量值。
这是我正在使用的软件:
我也尝试过从源代码构建GDB 7.1,因为从7.0开始它应该具有本机x86 / x86_64 Darwin支持。它构建良好并从命令行启动OK,但是当我尝试从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)).
网络上的各种消息来源表明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(IDE for IDE)重新执行了之前描述的所有测试(GDB版本6.3.5和7.1)。 C / C ++开发人员),包括CDT 7.0。遇到了所有相同的报道问题。 Mac OS X上的Eclipse CDT调试Snow Leopard仍无法正常运行。
有没有人知道一些不同的和/或基于Eclipse的可靠解决方案,我已经报告过上面的场景了?
答案 2 :(得分:1)
答案 3 :(得分:0)
将来,您还可以尝试使用Xcode(仅用于调试) - 拖动所有文件以将其导入新项目,但不进行编译。而是打开调试器窗口并附加到正在运行的进程。
答案 4 :(得分:0)
同样的问题,但我可能找到了办法。在Eclipse中,在项目属性下,在“运行/调试”设置中,我删除了启动配置并再次运行调试器。
此时一切正常,但如果我修改,启动调试器至少需要10秒钟。我认为它与调试属性和启动器配置的组合有关。
答案 5 :(得分:0)
更新到已发布的Eclipse 3.6(Helios)版本并使用DSF / GDB Create Launcher。为完成Eclipse 3.6(Helios)的可用级别,DSF / GDB框架的功能奇偶校验已经做了很多工作。现在使用Eclipse CDT 3.6 Helios在OS X 10.5和10.6上进行调试就可以了。
答案 6 :(得分:0)
好了,目前使用版本为7.1的/opt/local/bin/fsf-gdb
似乎可以解决问题!我没有对它进行过广泛的测试,但是我可以在非常不同的函数中使用断点,程序会在调试时停止。
答案 7 :(得分:0)
您可以按照 GDB on OS X Mavericks and Xcode 5 页面的说明进行操作。