【问题标题】:Eclipse/MinGW/CDT/GDB and problems with debuggingEclipse/MinGW/CDT/GDB 和调试问题
【发布时间】:2013-11-20 18:24:08
【问题描述】:

我有一些 C++ 代码并尝试调试它。 main.cpp:

#include <iostream>
using namespace std;

int main() {
    graph<int> a;
    a.add(1);
    a.addEdge(1,2);
    std::vector<int> answ = a.getAdjacent(1);
    for (unsigned int i = 0; i < answ.size(); i++)
    std::cout<<answ[i]<<std::endl;
    return 0;
}

我在“graph a;”上有一个断点。但是当我开始调试时,我得到:

The target endianness is set automatically (currently little endian)
No source file named C:\Users\home\workspace\graphcpp\main.cpp.
[New Thread 3552.0xdc8]

有什么问题?

【问题讨论】:

  • 这段代码似乎不完整(graph 模板类型来自哪里?),但由于错误似乎与文件内容无关,所有图表内容都分散了注意力;我认为最小的代码是“int main() { /*line-break*/ return 0; /*line-break*/ }”,并在“return 0;”行放一个断点。
  • @gx_ 与int main() { /*line-break*/ return 0; /*line-break*/ }同样的问题
  • 尽可能(暂时)简化您的 PATH。我已经看到 Eclipse 遇到了它不喜欢的有效路径问题。这是一个makefile项目吗?尝试以 msys 方式引用路径(/c/users/home...)。

标签: c++ eclipse gdb mingw eclipse-cdt


【解决方案1】:

在将 eclipse +cdt 与 gdb 一起使用时,这似乎是一个相对频繁的问题。将默认启动器从 GDB (DSF) Create Process 更改为 Standard Create Process 似乎大部分时间都可以解决问题。

你可以在Preferences->Run/Debug->Launching->Default Launchers下找到这个选项

还要确保您在编译时启用了-g 调试信息。

【讨论】:

  • 我没有标准的创建流程;只是第一个显示的选项和旧版创建流程。
  • 标准已重命名为旧版。 bugs.eclipse.org/bugs/show_bug.cgi?id=426586
  • 谢谢你为我解决了这个问题,但我想知道为什么 Dsf 不能正常工作
  • 我有一个来自Makefile with existing code 的项目,我也遇到了同样的问题,但是我找不到这个菜单选项?是在Makefile 这个设置中还是我遗漏了什么?
  • @Elod 不妨试试 Luna SR2 版本——它与 CDT 8.6.0 打包在一起。我刚刚检查了它,设置是相同的,只是它重命名为Legacy Create Process,正如 tzafrir 指出的那样。确保在“启动类型/模式”中选择了[Debug],否则“首选启动器”将为空。
【解决方案2】:

似乎只在“main()”函数中添加标准参数就足够了(我注意到你没有在“main()”中使用参数:

检查这个link

我也看到了这个问题。 LinuxQuestions.org 的人们帮助我取得了一些进展...http://www.linuxquestions.org/questions/showthread.php?t=518283

gcc 4.1.0(即在 SUSE 10.1 中,32 位)似乎有一个优化,如果您不在 main() 的主体中使用 argc 和 argv,则这些符号不会出现在二进制文件中(即使使用 -g 并且没有打开任何特殊优化)。 64 位编译器不会偶然执行此操作。

如果您只是“中断主程序”并在不使用 argc/argv 的程序中打印 argc(并且是用 gcc 4.1.0 编译)。我注意到你的例子没有使用 argc/argv。

这适用于 C 或 C++ 编译。

Eclipse 在遇到第一个中断时可能会以某种方式被此错误弄糊涂。我也无法在更多断点处停止直到我添加了引用 argc/argv 的代码,或者将 main(在 C++ 中)重新声明为“int main(int, char *[])”这样 Eclipse 就不会期待这些符号了。

gdb 输出窗口仍有错误(当前上下文中没有符号“new”?),但可以设置断点。

HTH, -尼克

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 2010-12-07
    • 2015-11-12
    • 2011-04-26
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2011-04-26
    • 2013-04-01
    相关资源
    最近更新 更多