我在使用STL,C++和Visual Studio时遇到了一个大问题。当我使用某些std或stl函数(在调试编译时)有一些像这样的错误"Incorrect format specifier"
。在STL中调试错误
但我的代码太大,无法“手动搜索”此错误。也许一个知道如何得到一些帮助找到错误,有些像__FILE__
& __LINE__
断言?因为程序代码太大。
或者try
& catch
我最后的希望?...
对于亚历克斯
我在使用STL,C++和Visual Studio时遇到了一个大问题。当我使用某些std或stl函数(在调试编译时)有一些像这样的错误"Incorrect format specifier"
。在STL中调试错误
但我的代码太大,无法“手动搜索”此错误。也许一个知道如何得到一些帮助找到错误,有些像__FILE__
& __LINE__
断言?因为程序代码太大。
或者try
& catch
我最后的希望?...
对于亚历克斯
既然你对STL的源代码,我会做什么在点设置一个断点,其中“不正确的格式说明符“字符串位于。为该字符串做一个grep(例如,在文件中查找),在每个断点处设置断点,运行程序并希望死亡。 :)
也许你可以在控制台上做状态信息,这样你就可以知道错误发生的位置。您可以使用相同的技术在这部分进行更详细的搜索。根据需要经常这样做。
之后,您可以调试程序并在“问题区域”中设置断点并逐步完成。
编辑:如果你能够在Linux上编译程序,你可以简单地安装并运行valgrind memcheck。它应该用行号打印出所有的错误。
你说的是try/catch,所以我认为它抛出了一个异常。如果您在调试器中运行您的应用程序,是不是在抛出未捕获异常的地方破坏了您的程序?
编辑:如果你可以在Linux/g ++上交替编译,它会在这种情况下留下一个带有回溯的核心。
附加的屏幕截图清楚地表明您打了一个运行时断言,甚至提供了直接进入dbugger的选项。这会带你到错误的调用堆栈。
此消息是默认模式_CrtDbgReport
。使用_CrtSetReportHook2
,您可以在打印错误之前运行自己的代码。例如,您可以创建一个小型转储。
错误信息应该指定与之相关的源文件和行号...... – 2010-11-30 22:04:13
@Oli:我认为这个来自CRT,没有文件/行信息。 – 2010-11-30 22:11:53
我不明白。编译器是否提供了所有编译错误的文件&行? – Puppy 2010-11-30 22:17:40