2014-10-16 19 views
2

我有一個來自在CentOS 5.4上構建和運行的應用程序的堆棧跟蹤。該應用程序沒有調試建,所以沒有符號或行號的堆棧跟蹤,但只有地址,就像這樣:可以通過gdb解析調試符號給出不同的結果,具體取決於操作系統

/opt/app/bin/myApp [0x22ec09e] 
/opt/app/bin/myApp [0x1fcdf31] 
/opt/app/bin/myApp [0x22ebbcb] 
... 

我也有相同的應用程序,但與調試(-g)建。所以我可以用gdb打開這個二進制文件,並找到相應的源文件,函數名和這些地址對應的行號。

我的問題是,在CentOS 5.4上使用調試構建這個二進制文件,在哪個操作系統中,我使用gdb來解析符號?如果我使用gdb在CentOS 5.4上打開它,並使用信息行列表,結果可能與在說Fedora 16時做的結果不同嗎?我在CentOS 5.4和Fedora 16上做了一些測試,表明沒有區別。但是,我能否相信這總是如此,或者我有一天會發現在某些情況下可能會有差異?

注:應用程序是用C++編寫的,並用g ++編譯。請讓我知道是否需要任何額外的信息來回答這個問題。

回答

2

對我使用gdb來解決符號的操作系統有影響嗎?

否:地址到行號的映射在二進制鏈接時間是固定的。一旦二進制文件被鏈接,你可以在任何你想要的操作系統上執行映射。

我也有相同的應用程序,但用debug(-g)構建。

請注意,映射確實會根據您使用的優化標誌更改。這會工作:

# original application build 
g++ -O2 foo.cc bar.cc -o app 

# same with debug symbols: 
g++ -O2 -g foo.cc bar.cc -o app_g 

這是行不通的(appapp_g2符號之間不匹配):

g++ -g foo.cc bar.cc -o app_g2 
+0

謝謝您的回答和提的是,優化標誌會影響映射,高度讚賞。 – joaerl 2014-10-17 08:40:51

相關問題