【问题标题】:Better debugging in Visual Studio?在 Visual Studio 中进行更好的调试?
【发布时间】:2015-07-12 08:45:34
【问题描述】:

我有一个包含数千行代码的程序,在 Visual Studio 的调试模式下运行时可以正常执行。但是,当我从 Windows 资源管理器运行相同的调试可执行文件时,它给了我一个“调试断言失败”错误,指出向量下标超出范围。行号在std::vector,但我知道这不是真正的问题所在。

我不能设置一个停止点来查看调用堆栈,因为我不知道在哪里停止它。另外,Visual Studio 无论如何都没有捕捉到它。我有 15k 行代码和几十个向量。必须有一种方法可以配置 Visual Studio 或编译器以在程序从 GUI 运行时更多地询问程序以捕获它。我在调试知识的极限,教我,聪明的人!

我已经运行了依赖walker。有一些错误,但我认为这无关紧要。以防万一,这就是出现的情况:http://screencast.com/t/q3MoPRVH

【问题讨论】:

  • 断言失败时闯入调试器怎么办?
  • 它确实出现并说“按重试调试应用程序”,但它从未转移到 Visual Studio。事实上,什么也没有发生。 Abort、Retry 和 Ignore 都以窗口关闭结束。
  • 那么你能在这发生之前从 Visual Studio 附加吗?
  • 天哪,完全忘记了这一点。在它发生之前无法做到这一点,但附加该过程仍然让我接近错误,我现在看到它哪里出错了。谢谢!不过,为了交谈,如果我无法做到这一点,我的下一步是什么?
  • 我看不出从 Visual Studio 附加可能会失败(最坏的情况是您添加 sleep 调用以有足够的时间来执行此操作)。我现在不在 Windows 计算机前,所以我不太确定选项,我可能试图了解为什么从断言对话框进行调试一开始就不起作用。我知道有调试钩子的注册表项,本来可以找的。​​span>

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


【解决方案1】:

最好的选择可能是在调试断言失败时闯入您的代码。在 Windows 中,这称为即时 (JIT) 调试。要为此目的使用 Visual Studio,您必须正确配置它。如果这个MSDN documentation 对您没有帮助,请尝试直接编辑this guide 后面的Windows 注册表。 Visual Studio 的注册表值类似于

"C:\windows\system32\vsjitdebugger.exe" -p %ld -e %ld

【讨论】:

    【解决方案2】:

    查看未初始化变量的代码后,我建议您添加一些打印语句以查看它在崩溃之前到达的位置。

    很多时候,这些错误归因于未初始化的变量。

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2020-01-20
      • 1970-01-01
      • 2014-09-11
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2020-12-06
      相关资源
      最近更新 更多