2012-05-25 53 views
2

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

Failed assertion

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

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

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

+0

请参阅http://stackoverflow.com/q/2108000/11343 – CharlesB

+1

@CharlesB这个问题有其他解决方法。 –

回答

5

所有你应该做的就是点击“重试”,用调试器闯入应用程序的源代码。这将突出显示包含断言失败的行,因此很容易看到罪魁祸首,除非您想将多个嵌套断言嵌入单行。如果你这样做,那么你应该得到这可能给你带来的所有痛苦。

它现在不能为你工作的原因很可能是因为你的应用程序的当前版本没有可用的调试符号。当您使用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端口,但使用微软的工具集来构建它是微不足道的,它可以让你使用VS来调试你的代码。

+0

这就是执行'assert(false)'后的“Retry”:http:// i。imgur.com/w1zFL.png我不明白这有什么帮助。不能Visual Studio突出显示我的断言失败像Qt Creator那样的行吗? – Pieter

+0

@Pieter是的,这就是我的答案。错误信息如下:*“No Source Available:没有任何符号被加载用于任何调用堆栈帧。[因此,]源代码不能显示”*。您可以通过生成调试符号来修复该问题,以便VS调试器可以找到它们。推测你在Qt Creator中的设置会导致默认情况下发生这种情况,但是你已经配置了VS * not *来生成调试信息。您需要更改这些设置。一旦你这样做,VS就会像Qt Creator一样行事。我经常用这个。 –

+0

对不起,我首先想到你正在讨论获取DLL的调试符号。顺便说一下,我没有尝试在Qt Creator中打开这个Visual Studio项目。我已经启用[this](http://i.imgur.com/fSrxK.png)设置,但它不能解决我的问题。我错过了什么?谷歌搜索* visual studio 2010生成调试符号*没有返回任何我可以使用的。 – Pieter

相关问题