10

我有一些 C++ 代码并尝试调试它。主.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]

有什么问题?

4

2 回答 2

12

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

您可以在Preferences->Run/Debug->Launching->Default Launchers下找到此选项:

默认启动器

还要确保您在-g启用调试信息的情况下进行编译。

于 2013-11-11T19:51:19.063 回答
0

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

检查这个链接

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

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

如果您只是“中断 main”并在不使用 argc/argv 的程序中打印 argc(并且使用 gcc 4.1.0 编译),则会从 gdb命令行获得“无法访问地址 0x0 的内存” 。我注意到您的示例不使用 argc/argv。

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

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

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

HTH,-尼克

于 2016-04-25T09:33:14.927 回答