调试时自动禁用Visual Studio断点

时间:2014-02-26 20:04:31

标签: c++ debugging visual-studio-2012

我在VS 2012中运行C ++代码。 我设置了一个简单的断点

int main(int argc, char **argv)
{
    time_t start_time;
    time(&start_time);

    DUALISO_TIME dualiso_time;
    IO_TIME io_time = {0.0, 0.0};
    IO_INFO io_info;
    IJK::ERROR error;
    cout <<"DEBUG "<< endl;  // I have set a breakpoint.

虽然调试断点会暂时变为白色(从红色开始),但调试器在断点处不会中断,它只会继续。 (代码正在运行,因为它在控制台中打印DEBUG。) 我已经搜索了一段时间,但我没有找到任何解决方案。

一些笔记。 选择特定项目作为startUp项目。 我尝试过清洁和重建。 代码的一部分肯定是在运行。我甚至可以看到BreakPoint从红色短暂变为白色,但调试器并没有停止。 这是SCREEN SHOT

5 个答案:

答案 0 :(得分:1)

断点不会被击中的一些原因:

  • 可执行文件和代码不匹配。例如,您更改了代码,但是在编译时可执行文件正在使用,并且实际上没有更新。
  • 可执行文件在管理模式下运行,但Visual Studio以普通用户身份运行。
  • 断点可以被禁用,但仍然存在。转到断点窗口并确保断点已启用。

答案 1 :(得分:0)

当断点为白色时,表示Visual Studio无法将源文件中的位置与正在调试的应用程序匹配。通常情况下会出现以下原因

  • 源和可执行文件已过期。完全重建通常会解决此问题
  • 找不到可执行文件的PDB文件。转到调试 - &gt; Windows - &gt;模块并确保正确加载PDB

答案 2 :(得分:0)

以下是一些未提及的原因:

  • 可以删除预处理阶段的代码
  • 优化即可。一些代码可以优化出来。不使用优化来调试。

答案 3 :(得分:0)

一个额外的原因,如果您至少使用C#(不确定是否完全适用于C ++项目):

您当前的构建配置未配置为生成PDB文件。

转到项目,右键单击> Properties> Build> Advanced...> Debugging information

将其设置为full

答案 4 :(得分:0)

这可能是由于编译器优化而发生的。如果使用gcc -O进行编译,则将在附加程序后对程序进行优化,并禁用Visual Studio断点。为了解决这个问题,您可以在-O后面加上以下其他0来禁用编译器优化。

gcc -O0

您还可以使用gcc -Og(可从gcc 4.8获得)。这应该允许优化和调试。