我有一个程序,我想通过在非默认构造函数中设置断点来调试,但我设置的断点永远不会被命中。下面是一个示例程序,出现此问题。命中主函数中设置的断点没有问题,但忽略了Domain.cpp文件中设置的任何断点:
Main.cpp的:
#include <iostream>
#include "Domain.h"
int main()
{
Domain y;
std::cout << y.x << std::endl; // <- No problem setting breakpoint here
return 0;
}
Domain.cpp:
#include "Domain.h"
Domain::Domain()
{
x = 4; // <- A breakpoint here is skipped
}
Domain.h:
#ifndef DOMAIN_H_
#define DOMAIN_H_
class Domain
{
public:
int x;
public:
Domain();
};
#endif /* DOMAIN_H_ */
但是,如果我将所有内容都放在一个文件中,则问题不存在:
Main2.cpp:
#include <iostream>
int main()
{
class Domain
{
public:
int x;
Domain()
{
x = 4; // <- No problem setting breakpoint here now!
};
};
Domain y;
std::cout << y.x << std::endl;
return 0;
}
为什么会这样?如何更改此设置,以便在使用多个文件时能够设置断点?
我可以确认,当我在终端中手动运行调试器以及通过Eclipse CDT运行调试器时,断点都不起作用,我在这个问题中讨论了相同的错误,显然从未回答过:
Why does Eclipse CDT ignore breakpoints?
我正在使用:
-O0
和-g3
标志的gcc 4.2.1 请耐心等待我。我还在学习绳索。
答案 0 :(得分:2)
您可能正在点击此GDB bug。
这个bug早已修复,但您的GDB版本非常旧版(Apple不太可能更新它)。
答案 1 :(得分:0)
这是一个非常有趣的异常,我想进一步探讨,但我怀疑它与Eclipse的默认GCC设置有关。许多超级基本函数在它们点击编译器时会得到优化。 (有一次我试图跟踪一个简单的for循环,但完全取消了GCC的最高优化设置)