【问题标题】:__FILE__, __LINE__ and __FUNCTION__ for QML files?__FILE__、__LINE__ 和 __FUNCTION__ 用于 QML 文件?
【发布时间】:2016-12-31 14:50:17
【问题描述】:

随着我正在做的项目越来越大,我已经厌倦了编写全面的日志消息,需要找出问题所在和位置。

因此,如果我可以将这些信息自动合并到消息中,那将非常有用。对于 C++,我们有方便的 __FILE____LINE____FUNCTION__ 宏,但我似乎没有为 QML 找到任何宏。

请注意,console.trace() 在控制台中以以下格式输出跟踪:

onCompleted (qrc:/main.qml:72)

所以它包括函数、文件和行,这就是我所需要的,因此我假设已经存在获得这些的方法。自然,console.trace() 并没有完全削减它,因为它直接输出到控制台,而我需要将它们作为字符串合并到我的日志消息中。

那么有什么方法可以得到这些吗?

我当然不想在实际的 QML 源中获取它们,但与 console.trace() 的方式相同 - 在我的 Log.error() 被调用的地方,所以我可以只使用 Log.error("some error") 而不是 Log.error("some error in " + file + ", at " + line + " while executing " + func)这实际上会比手动编写整个事情更加乏味。

或者,如果有人能指出 qml console 的实现,我也将不胜感激,因为我梳理了“控制台”的整个 qtdeclarative 代码库,但一无所获。

请注意,我已经找到 this,但它对我没有用,因为我需要它用于特定的消息子集,并且不想覆盖所有输出的默认消息处理程序。

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    console.logconsole.debugconsole.infoconsole.warnconsole.error可用于将调试信息打印到控制台。输出是使用 C++ 中的qDebugqWarningqCritical 方法生成的(另请参阅Debugging Techniques 以及这些函数是如何产生的implemented,尤其是this internal function)。设置环境变量QML_CONSOLE_EXTENDED 还会打印调用的源代码位置。例如,

    export QT_MESSAGE_PATTERN="[%{type}] %{appname} (%{file}:%{line}) - %{message}"
    

    现在的输出是这样的,

    link 包含有关自定义QT_MESSAGE_PATTERN 环境变量的详细信息。

    【讨论】:

    • 我需要将它们作为字符串获取,而不是在控制台中打印它们。
    • 感谢您的链接,尽管乍一看似乎无法使用它。并非没有办法找到调用上下文。
    • @dtech ,有什么出路吗?
    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多