2010-11-30 85 views
1

我在使用STL,C++和Visual Studio时遇到了一个大问题。当我使用某些std或stl函数(在调试编译时)有一些像这样的错误"Incorrect format specifier"在STL中调​​试错误

但我的代码太大,无法“手动搜索”此错误。也许一个知道如何得到一些帮助找到错误,有些像__FILE__ & __LINE__断言?因为程序代码太大。

或者try & catch我最后的希望?...

对于亚历克斯

+1

错误信息应该指定与之相关的源文件和行号...... – 2010-11-30 22:04:13

+0

@Oli:我认为这个来自CRT,没有文件/行信息。 – 2010-11-30 22:11:53

+0

我不明白。编译器是否提供了所有编译错误的文件&行? – Puppy 2010-11-30 22:17:40

回答

0

既然你对STL的源代码,我会做什么在点设置一个断点,其中“不正确的格式说明符“字符串位于。为该字符串做一个grep(例如,在文件中查找),在每个断点处设置断点,运行程序并希望死亡。 :)

0

也许你可以在控制台上做状态信息,这样你就可以知道错误发生的位置。您可以使用相同的技术在这部分进行更详细的搜索。根据需要经常这样做。
之后,您可以调试程序并在“问题区域”中设置断点并逐步完成。

编辑:如果你能够在Linux上编译程序,你可以简单地安装并运行valgrind memcheck。它应该用行号打印出所有的错误。

0

你说的是try/catch,所以我认为它抛出了一个异常。如果您在调试器中运行您的应用程序,是不是在抛出未捕获异常的地方破坏了您的程序?

编辑:如果你可以在Linux/g ++上交替编译,它会在这种情况下留下一个带有回溯的核心。

0

附加的屏幕截图清楚地表明您打了一个运行时断言,甚至提供了直接进入dbugger的选项。这会带你到错误的调用堆栈。

此消息是默认模式_CrtDbgReport。使用_CrtSetReportHook2,您可以在打印错误之前运行自己的代码。例如,您可以创建一个小型转储。