【问题标题】:Visual Studio Breakpoints being automatically disabled while debugging调试时自动禁用 Visual Studio 断点
【发布时间】:2014-03-29 21:54:12
【问题描述】:

我在 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。) 我已经搜索了一段时间,但没有找到任何解决方案。

一些笔记。 特定项目被选为启动项目。 我试过清洁和重建。 这部分代码肯定正在运行。我什至可以看到 BreakPoint 从红色短暂变为白色,但调试器并没有停止在该点。 这里是SCREEN SHOT

【问题讨论】:

  • 这通常意味着断点永远不会被命中。仔细检查您的代码是否已首先编译。此外,您在 Debug 中编译并生成了符号文件 (.PDB)

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    将其设置为full

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        当断点为白色时,表明 Visual Studio 无法将源文件中的位置与正在调试的应用程序匹配。这通常是由于以下原因而发生的

        • 源代码和可执行文件已过期。完全重建通常会解决这个问题
        • 找不到可执行文件的 PDB 文件。转到 Debug -> Windows -> Modules 并确保正确加载 PDB

        【讨论】:

          【解决方案5】:

          由于编译器优化,可能会发生这种情况。如果您使用gcc -O 编译,则程序将被优化,并且在附加程序后 Visual Studio 断点将被禁用。为了解决这个问题,您可以在 -O 后面加上 0 来禁用编译器优化,如下所示。

          gcc -O0
          

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

          【讨论】:

            猜你喜欢
            • 2016-08-06
            • 1970-01-01
            • 2018-09-09
            • 2013-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多