2013-03-21 70 views
0

背景不同GDBS,不同的調試行爲

我試圖調試使用一些個人動態庫一個C++代碼。我使用的是Mac OSX,但我沒有使用llvm/clang來編譯我的代碼或庫。目前,我正在使用自制軟件提供的GNU g ++編譯器(4.7)。

問題

我有調試器的兩種選擇在這樣的環境:(6.3.50-20050815(版本GDB-1824)GNU GDB蘋果)和GDB安裝了Mac開發工具提供的GDB版本用自制軟件(GNU gdb(GDB)7.5.1)。我寧願使用後者,但在使用時,它顯示了許多重要的變量,如優化了

例如,這是用gdb 7.5.1我的程序的輸出的提取物:

Breakpoint 1, MWE::Outputs (this=<optimized out>, time=<optimized out>) 
    at /Users/ynet/temp/mwe.cpp:203 
203  cout << "example" << endl; 
(gdb) p this 
$1 = <optimized out> 

雖然GDB 50年3月6日所示:

Breakpoint 1, MWE::Outputs (this=0x100601080, time=0.64300000000000046) at /Users/ynet/temp/mwe.cpp:203 
203  cout << "example" << endl; 
(gdb) p this 
$1 = (MWE * const) 0x100601080 

這兩個程序是相同的(即它是相同的可執行文件);它已經用自制軟件g ++ - 4.7編譯,而不是Apple Developer Tools提供的llvm/clang編譯器。 不像關於優化掉了結果GDB的問題,我已籤,我與「-O0」編譯(我目前的標誌是「-O0 -g -ggdb」)

問題

爲什麼在這種情況下我得到兩種不同的gdb行爲,爲了使用最新的gdb版本而沒有優化的值,我應該怎麼做?

回答

1

爲什麼我會在這種情況下得到gdb的兩種不同的行爲,我應該怎麼做才能使用最新的gdb版本而沒有優化值?

顯然是GDB打印<optimized out>未優化代碼的錯誤。

您應該嘗試使用從主幹構建的GDB重現此操作,創建一個顯示問題的最小測試用例並提交bugzilla錯誤。