我的 C++ 代码出现此错误:http: //imageshack.us/photo/my-images/193/vcerror.png/
唯一的问题是它没有指出问题出在哪里......我知道字符串下标超出范围,但我不知道它可能在哪里。
我想知道是否无论如何我都能找到它在哪里?我有一个粗略的想法,所以我在那里放了一个断点,但是 VC++ 如何做断点是可怕的。我逐步完成,但它只向我显示 C++ 文件本身的代码,而不是我自己的代码。
所以,我跨过去,错误立即显示。
我怎样才能找到这个问题?
我的 C++ 代码出现此错误:http: //imageshack.us/photo/my-images/193/vcerror.png/
唯一的问题是它没有指出问题出在哪里......我知道字符串下标超出范围,但我不知道它可能在哪里。
我想知道是否无论如何我都能找到它在哪里?我有一个粗略的想法,所以我在那里放了一个断点,但是 VC++ 如何做断点是可怕的。我逐步完成,但它只向我显示 C++ 文件本身的代码,而不是我自己的代码。
所以,我跨过去,错误立即显示。
我怎样才能找到这个问题?
基本上,您需要查看调用堆栈并设置所有符号。
我将大胆猜测并建议您可能不知道如何使用“调用堆栈”窗口。
在您的程序的调试会话中并且没有设置断点,让您的程序运行直到它遇到断言对话框。按“重试”以允许将控制权传递给调试器。可能会弹出另一个对话框,提示您“中断”或“继续”。选择休息。此时您应该进入调试器。
然后确保您可以看到调用堆栈并至少打开一个监视窗口。
Debug->Windows->Call Stack.
Debug->Windows->Watch->Watch 1
您可以双击调用堆栈窗口中的任何项目以跳转到预期执行返回的确切代码行。(有时编辑器窗口上的小箭头指向在前一个调用返回后要运行的下一行代码)。双击顶部调用堆栈行正下方的调用堆栈窗口中的函数行。这很可能是 std::basic_string::operator。什么值被传递到这个函数中?如果将鼠标悬停在变量名称上不起作用,请将其添加到“监视”窗口。此外,为“this”添加一个监视,以便您可以分析字符串的实际大小和容量。
双击您当前所在的调用堆栈中的函数调用。这应该将您带到程序中实际的错误代码行。为字符串变量添加另一个监视,应该能够找出问题所在。
剩下的就看你了。
我假设这是一个独立的 EXE 项目,所有内容都由 IDE 构建。如果不是,请确保生成的每个二进制文件的 PDB 文件与相应的二进制文件位于同一目录中。同样,如果这是 Visual Studio 中的简单 EXE 项目,这是自动的。只是为了确定,请确保您首先“清理”您的构建,然后进行完整的重建。这有时会修复调试问题。