调试断言失败

时间:2011-09-01 01:54:41

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

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

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

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

所以,我走过去,错误就会立即显示出来。

如何追踪此问题?

1 个答案:

答案 0 :(得分:1)

基本上,您需要查看callstack并设置所有符号。

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

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

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

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

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

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

其余由你决定。

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