Qt和C ++:应用程序仅在调试模式下崩溃

时间:2018-11-08 15:10:13

标签: c++ qt debugging crash segmentation-fault

我无法理解某些硫键。因此,我有一个使用带有lambda函数的std :: for_each的方法。在此lambda函数中,我执行了dynamic_cast。这只是一个小背景。此dynamic_cast崩溃。我不是在问它为什么崩溃或如何解决它,因为我知道(我对已删除的对象执行了dynamic_cast)。我的问题是,为什么仅在调试模式下(在Qt中)崩溃?

我了解为什么它在调试时崩溃,但是我不明白为什么它在发行时不崩溃。几周前,我在不同的代码上遇到了类似的问题,但是两次崩溃都是分段错误。是因为段错误是无法定义的行为,并且调试和发布之间的行为是不同的吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

我假设您正在运行Linux。如果是这样,则可以使用gdb(使用-g标志进行编译)。在动态投射时设置一个断点。然后,您可以进入以下每个功能。也许这可以使您更好地了解qt中调试和发布模式之间的区别。

以下是有用的gdb commands的很好概述。

答案 1 :(得分:0)

我认为您存在内存泄漏或内存不足。您可以尝试使用Valgrind在程序中查找可疑和危险的地方。

还要检查您是否在框架中正确使用了ASSERT指令等。 ASSERT内部的表达式不应影响程序的逻辑,因为在发行版中,许多ASSERT实现均未执行。