gpt4 book ai didi

c++ - Qt SIGABRT替代消息?

转载 作者:行者123 更新时间:2023-11-30 03:28:09 34 4
gpt4 key购买 nike

我用的是Qt5.9,一个简单的检查:

      assert(pobjNode != NULL);

将导致显示 Qt Signal Received 错误对话框,该对话框不会提供有关问题所在或问题所在的任何有用信息。

有没有办法用更有用的信息替换这些无用的信息?

我正在考虑的是一种设置对话框的方法,以在发生错误时显示可能是错误的内容。

最佳答案

Q_ASSERT 是一个自定义断言宏,据称可以增强标准 assert 功能。

错误信息由 qFatal()处理,它在某些平台上的表现可能比标准断言宏稍微好一些。例如,在 Windows 上,它会在断言失败时触发 Visual Studio 调试器,而不是仅仅调用 abort()

您还可以重定向 Qt 错误消息函数(例如qFatal)的输出到您的自定义消息处理程序(使用qInstallMessageHandler())。例如,如果您想将错误消息重定向到文件,它会很有用。

另请注意,Q_ASSERT 被宏 QT_NO_DEBUG 禁用(而 assertNDEBUG 禁用):这可用于将您的断言与 Qt 相关的代码和其余代码分开。

Q_ASSERT_X 如果测试为假,则打印消息 what 以及位置、源文件名和行号。如果测试为假,则打印消息内容以及位置、源文件名和行号。示例:

 // File: div.cpp
#include <QtGlobal>
int divide(int a, int b)
{
Q_ASSERT_X(b != 0, "divide", "division by zero");
return a / b;
}

阅读更多关于 test and debug 的信息.

关于c++ - Qt SIGABRT替代消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46825000/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com