的UB消毒劑在哪裏使用已經安裝clang version 3.4 (tags/RELEASE_34/final)
特拉維斯CI建成,我建立我的代碼以這樣的:從程序附加輸出與鏘
clang++ main.cpp -m64 -fsanitize=undefined -Werror -std=c++98 -pedantic -pedantic-errors -fvisibility=hidden -fstrict-aliasing -Weverything -Qunused-arguments -fcolor-diagnostics -O3 -DNDEBUG
(這個命令是從compile_commands.json
得到其中產生從cmake的)
而在程序之後的輸出退出一些數字(如存儲器十六進制表示)出現:
00 00 00 10 70 fb 01 00 00 00 00 10 70 fb 01
我的猜測是這是來自UB消毒劑,因爲當我用ASAN或沒有消毒劑的時候,所有這些數字都不存在。
那麼它們是什麼意思?如何診斷我的UB錯誤(如果確實如此)?
我以爲洗手間遇到錯誤時會使程序崩潰,並打印出一條帶有解釋的大信息。那麼這是什麼?
對我來說,這是一個交易斷路器,因爲我將文本文件中的參考輸出與當前版本的程序輸出進行比較,並且此類附加輸出會破壞所有內容。
我在本地嘗試使用Clang 3.6,這是我的Ubuntu使用相同的生成命令的默認值,但是當我運行可執行文件時,我沒有得到任何錯誤或這種額外的輸出。
here是travis上失敗的版本 - 我不認爲我的代碼是相關的,因爲我的問題是與消毒劑輸出沒有任何幫助。
那麼你知道他們對未定義行爲的看法。 –
是的 - 但不是應該幫助診斷UB的工具嗎?而不只是說'''嘿!有一些UB''' – onqtam
嗯,該工具注入代碼到可執行文件中。 「未定義的行爲」可能會使UBSan停止工作,這並不令人感到意外。我相信你有正當的理由,但我也注意到你禁用了很多警告,這些警告對於捕捉UB(使用你的編譯指示)很有用。 –