2014-10-10 106 views
0

在linux上運行我的Qt5應用程序時,我看不到任何qDebug,qWarning,qCritical或qFatal的輸出。我知道我可以使用qInstallMsgHandler來安裝消息處理程序並查看它們,但這相當重量級。QT默認QDebug qWarning qCritical和qFatal日誌位於哪裏?

我只想檢查qWarning日誌,看看是否有任何錯誤連接的信號。有沒有辦法看這個日誌?一個特殊的命令行選項,一個環境變量?

我想我記得過去一切都打印到stderr,也許這是Qt5的變化?

回答

2

它們仍然打印到標準錯誤。

如果從命令行啓動應用程序,通常會打印該應用程序,或者如果使用Qt Creator,則會顯示在「應用程序輸出」窗口中。

2

如果您碰巧運行Arch Linux,它使用-journald選項編譯Qt,則所有調試輸出都默認指向systemd日誌(顯示格式爲journalctl)。

您可以通過將QT_LOGGING_TO_CONSOLE=1定義爲環境變量來覆蓋此行爲。

0

如果您使用visual studio,qDebug等打印到IDE中的輸出窗口。

10

請不要錯誤地假設qDebug,qWarning,qCritical和qFatal總是登錄標準錯誤。這絕對不是這種情況。

實際目標因Qt配置和目標操作系統而異。另外,5.4引入了一些行爲變化。請參閱herehere進行討論。

TL; DR:

Qt的> = 5.4:

  • 如果你想隨時登錄stderr上,該QT_LOGGING_TO_CONSOLE環境變量設置爲1
  • 如果您不想登錄stderr,則QT_LOGGING_TO_CONSOLE環境變量爲0(這將強制通過本機系統記錄器進行記錄)。
  • 如果QT_LOGGING_TO_CONSOLE環境變量未設置爲,那麼是否記錄到控制檯取決於應用程序是在TTY中運行(在UNIX上)還是在Windows上有控制檯窗口。

Qt的< 5.4,情況更加混亂。

  • 如果Qt已經構建並支持特定的日誌框架(例如SLOG2,journald,Android日誌等))然後日誌記錄總是去那個框架
  • 否則在UNIX上它去stderr
  • 否則在Windows上OutputDebugString或stderr取決於應用程序是否是控制檯應用程序。

5.4之前的方法存在的問題是,如果Qt是使用日誌支持構建的,則在Unix IDE下f.i.不會捕獲應用程序的調試輸出。這是因爲輸出到了日誌記錄,而不是到IDE。在5.4中,這種方法在各種操作系統中變得更加靈活和統一。

+0

這是因爲你說除了QT_LOGGING_TO_CONSOLE似乎使用Qt 5.3.2(由ArchLinux的作爲包裝) – Mildred 2014-10-30 09:32:22

+0

也許拱向後移植補丁的工作?看到這個錯誤報告https://bugs.archlinux.org/task/40583討論 – peppe 2014-10-30 18:07:42

+0

我只找到這對Arch Linux的論壇在別處找到了答案後,但得到的答覆是完美的。我的問題是更多的「爲什麼qDebug()停止去安慰升級後的Qt(過去5.3)?」這個線程應該從一堆其他的stackoverflow問題中引用。 – Dan 2017-06-05 20:34:50