c++ - 调试断言失败

标签 c++ debugging visual-c++ assertion

我的 C++ 代码出现此错误: http://imageshack.us/photo/my-images/193/vcerror.png/

唯一的问题是它没有指出问题所在...我知道字符串下标超出范围但我不知道它可能在哪里。

我想知道我是否能找到它在哪里?我有一个粗略的想法,所以我在那里放了一个断点,但是 VC++ 如何做断点是可怕的。我单步执行,但它只显示 C++ 文件本身的代码,而不是我自己的代码。

因此,我跨过一步,错误立即显示。

我怎样才能找到这个问题?

最佳答案

基本上,您需要查看调用堆栈并设置所有符号。

我将大胆猜测并建议您可能不知道如何使用“调用堆栈”窗口。

在您的程序的调试 session 中并且没有设置断点,让您的程序运行直到它命中断言对话框。按“重试”以允许将控制传递给调试器。可能会弹出另一个对话框提示您“中断”或“继续”。选择休息。此时您应该进入调试器。

然后确保您可以看到调用堆栈并且至少有一个监 window 口。

Debug->Windows->Call Stack.
Debug->Windows->Watch->Watch 1

您可以双击调用堆栈窗口中的任何项目以跳转到预期执行将返回到的确切代码行。 (有时编辑器窗口上的小箭头指向在上一个调用返回后要运行的下一行代码)。双击顶部调用堆栈行正下方的调用堆栈窗口中的函数行。这可能是 std::basic_string::operator。传递给此函数的值是什么?如果将鼠标悬停在变量名称上不起作用,请将其添加到“观察”窗口。此外,为“this”添加一个监视,以便您可以分析字符串的实际大小和容量。

双击您当前所在位置下方调用堆栈中的函数调用。这应该将您带到程序中实际有错误的代码行。为字符串变量添加另一个监视,应该能够找出问题所在。

剩下的由你决定。

我假设这是一个独立的 EXE 项目,所有内容均由 IDE 构建。如果不是,则确保生成的每个二进制文件的 PDB 文件与相应的二进制文件位于同一目录中。同样,如果这是 Visual Studio 中的简单 EXE 项目,这是自动的。可以肯定的是,请确保先“清理”您的构建,然后进行完整的重建。这有时会修复调试问题。

关于c++ - 调试断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265392/

相关文章:

c++ - 索引属性如何返回引用?

c++ - 将包含目录添加到 AUTOMOC

erlang - 跟踪 Erlang 函数 - 简写形式

com - DCOM 简单教程

c++ - 视觉泄漏检测器 (VLD) 显示空调用堆栈

ios - 放松 segue 干扰 shoe segue

c++ - 调用 AddUser 时持续出现 87 错误

c++ - 为什么我在 C++ 中收到针对此基于范围的 for 循环的警告?

c++ - 当数组大小已满时如何将循环数组的内容复制到更大的数组中

java - 在 Hibernate 驱动的 Spring 应用程序中调试 JUnit 测试