我正在嘗試調試一些C++ 11代碼,而LLDB沒有幫助。代碼看起來大致是這樣的:如何關閉Clang ++中的_all_優化?
void f(my_type dt) {
try {
g(h(dt));
}
catch (/* reasonable exception type here */) {
}
}
當我把一個斷點在g(h(dt))
線,LLDB堅持的dt
值是不可用的。它肯定不能被消除,因爲它被用於執行h
作爲一些數據庫查詢的輸入。
我用CMake的,並將其編譯使用以下標誌:
CXX_FLAGS = -g -O0 -fPIC -std=c++11 -stdlib=libc++ -Wall
我證實了(使用make VERBOSE=true
),這些標誌是,的確,用於構建該項目。據我所知,應該包含完整的調試信息,並關閉所有優化。這顯然不是這種情況。 我還可以添加哪些其他標誌來強制Clang在調用堆棧中保留所有參數和變量?
不幸的是,使用小文件和函數的小測試用例不會再現這個問題:大多數情況下,變量是按照我的預期保存的。
我正在運行優勝美地的Mac上工作。
$ clang++ --version
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix
'-fno-inline'也許? – Pradhan 2015-02-11 20:57:45
不,'-fno-inline'沒有幫助。 – gcv 2015-02-12 00:02:23