Visual Studio可以告诉我哪个断言失败了吗?

时间:2012-05-25 09:20:10

标签: c++ visual-studio-2010

我通常使用Qt Creator来满足我的C ++需求。当我的程序中的断言失败时,它可以告诉我哪个断言失败了。在Visual Studio中,我只看到这个:

Failed assertion

我可以单击“重试”跳转到应用程序,但它不会告诉我哪个断言失败。即使对于简单的assert(false),Visual Studio也会尝试向我展示 msvcr100d.dll 的源代码,该代码不可用。

如何找出程序中哪个断言失败?我真的不想使用断点和std::cout的组合进行繁琐的手动搜索,以便自动跟踪。

编辑:Visual Studio确实为我生成了一个.PDB文件,但它仍无效。虽然调试器不会突出显示失败断言的行,但我确实在命令行上看到断言失败:false,文件main.cpp,第8行。为什么它不能只显示我的行并让我检查变量?我的意思是,所有信息似乎都可用......

1 个答案:

答案 0 :(得分:6)

您只需单击“重试”即可使用调试器进入应用程序的源代码。这将突出显示包含失败的断言的行,因此除非您想将多个嵌套断言塞入单行,否则很容易看到罪魁祸首。如果你这样做,那么你应该得到这可能导致你的所有痛苦。

它现在不适合您的原因很可能是因为您没有应用程序当前版本中提供的调试符号。使用与Visual Studio捆绑在一起的编译器构建应用程序时,根据项目设置,它将生成一个.PDB文件,其中包含调试符号。这些是在调试时获取有用信息所必需的,例如上一次失败产生的行。

确保在编译应用程序时,将其设置为生成调试符号。您应该在/ bin目录中看到.PDB文件。 As discussed here,调试符号的生成与是否启用优化是正交的(配置通常称为“发布”)。

更新:我刚刚意识到你可能在Qt Creator中编译/构建应用程序,然后尝试从Visual Studio调试二进制文件。这不会很好 - 如果你不使用VS的工具编译,它不会生成VS调试器可以读取的调试符号。

我认为问题反过来是相同的:如果你使用Visual Studio构建,然后尝试使用Qt Creator进行调试,它可能也无法解释调试符号。

因此,我建议坚持使用单个工具集进行构建。使用哪个IDE无关紧要,但您需要使用相同的工具进行编译/构建。您可以配置Qt Creator或Visual Studio以使用与另一个捆绑的编译器和链接器。通常Qt Creator附带一个GCC的Win32端口,但是使用Microsoft的工具集来构建它是微不足道的,这将允许您使用VS来调试代码。