2016-10-17 29 views
1

在Linux上我用如何檢查LLDB是否從共享庫加載調試符號?

(gdb) i shared 

在gdb和gdb打印或者用星*如果沒有調試符號被加載的庫或沒有它,如果加載,如清單:

0x0000000100c18660 0x0000000100c489a0 Yes (*)  /Users/anon/work/software/webrtc-audio-processing-0.1/build_darwin/../bin/darwin/lib/libwebrtc_audio_processing.0.dylib 
0x0000000100c57ca0 0x0000000100c76978 Yes   /Users/anon/work/software/speex/speex/speex-1.2rc2/build_darwin/../bin/darwin/lib/libspeex.1.dylib 

我發現在LLDB我應該使用

(lldb) image list

做同樣的。但我得到庫的列表,它說我什麼都不是在調試符號是否已加載的lib或沒有,e.g:

[181] 19269C1D-EB29-384A-83F3-7DDDEB7D9DAD 0x00007fff8d2d3000 /System/Library/PrivateFrameworks/CoreWiFi.framework/Versions/A/CoreWiFi 
[182] 8D7BA9BA-EB36-307A-9119-0B3D9732C953 0x00007fff879ee000 /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth 
[183] 6F03761D-7C3A-3C80-8031-AA1C1AD7C706 0x00007fff92e52000 /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols 

那麼,如何檢查,如果調試符號被加載LLDB?

更新:我剛剛決定後(lldb) image lookup -vn <function>(感謝吉姆)的輸出別人知道是什麼樣子:

image lookup -vn Herqq::Upnp::HSsdp::init 
2 matches found in libHUpnp.2.dylib: 
     Address: libHUpnp.2.dylib[0x00000000000283f0] (libHUpnp.2.dylib.__TEXT.__text + 150384) 
     Summary: libHUpnp.2.dylib`Herqq::Upnp::HSsdp::init() at hssdp.cpp:804 
     Module: file = "libHUpnp.2.dylib", arch = "x86_64" 
    CompileUnit: id = {0x00000000}, file = "/Users/blade/work/software/HUPnP/build-herqq-Desktop_Qt_5_5_0_clang_64bit-Debug/hupnp/../../herqq/hupnp/src/ssdp/hssdp.cpp", language = "c89" 
     Function: id = {0xa0002401f}, name = "init", range = [0x00000000000283f0-0x0000000000028511) 
     FuncType: id = {0xa0002401f}, decl = hssdp.h:304, clang_type = "_Bool (void)" 
     Blocks: id = {0xa0002401f}, range = [0x000283f0-0x00028511) 
     LineEntry: [0x00000000000283f0-0x00000000000283ff): /Users/blade/work/software/HUPnP/build-herqq-Desktop_Qt_5_5_0_clang_64bit-Debug/hupnp/../../herqq/hupnp/src/ssdp/hssdp.cpp:804 
     Symbol: id = {0x00000c9b}, range = [0x00000000000283f0-0x0000000000028520), name="Herqq::Upnp::HSsdp::init()", mangled="_ZN5Herqq4Upnp5HSsdp4initEv" 
     Variable: id = {0xa0002403a}, name = "this", type= "Herqq::Upnp::HSsdp *", location = DW_OP_fbreg(-16), decl = 
     Variable: id = {0xa00024047}, name = "herqqLog__", type= "HLogger", location = DW_OP_fbreg(-32), decl = hssdp.cpp:805 
     Variable: id = {0xa00024056}, name = "ha", type= "QHostAddress", location = DW_OP_fbreg(-56), decl = hssdp.cpp:812 
     Address: libHUpnp.2.dylib[0x0000000000028550] (libHUpnp.2.dylib.__TEXT.__text + 150736) 
     Summary: libHUpnp.2.dylib`Herqq::Upnp::HSsdp::init(QHostAddress const&) at hssdp.cpp:817 
     Module: file = "libHUpnp.2.dylib", arch = "x86_64" 
    CompileUnit: id = {0x00000000}, file = "/Users/blade/work/software/HUPnP/build-herqq-Desktop_Qt_5_5_0_clang_64bit-Debug/hupnp/../../herqq/hupnp/src/ssdp/hssdp.cpp", language = "ISO C++:1998" 
     Function: id = {0xa0002408f}, name = "init", range = [0x0000000000028550-0x000000000002862d) 
     FuncType: id = {0xa0002408f}, decl = hssdp.h:321, clang_type = "_Bool (const class QHostAddress &)" 
     Blocks: id = {0xa0002408f}, range = [0x00028550-0x0002862d) 
     LineEntry: [0x0000000000028550-0x0000000000028564): /Users/blade/work/software/HUPnP/build-herqq-Desktop_Qt_5_5_0_clang_64bit-Debug/hupnp/../../herqq/hupnp/src/ssdp/hssdp.cpp:817 
     Symbol: id = {0x00000ca3}, range = [0x0000000000028550-0x0000000000028630), name="Herqq::Upnp::HSsdp::init(QHostAddress const&)", mangled="_ZN5Herqq4Upnp5HSsdp4initERK12QHostAddress" 
     Variable: id = {0xa000240aa}, name = "this", type= "Herqq::Upnp::HSsdp *", location = DW_OP_fbreg(-16), decl = 
     Variable: id = {0xa000240b7}, name = "unicastAddress", type= "const QHostAddress &", location = DW_OP_fbreg(-24), decl = hssdp.cpp:816 
     Variable: id = {0xa000240c6}, name = "herqqLog__", type= "HLogger", location = DW_OP_fbreg(-40), decl = hssdp.cpp:818 

回答

0

如果你的二進制文件用的dSYM建成,那麼的dSYM將在顯示圖像列表中二進制列表後面的行。

如果二進制文件使用「在.o文件中保留調試信息」樣式,這是Xcode中調試配置的默認樣式,那麼執行此操作並不容易。我提出了一個錯誤以便更容易看到。

一個相當簡單的方式來做到這一點是:

(lldb) image lookup -vn <SomeFunctionNameThatShouldHaveDebugInfo> 

如果命令的輸出包括CompileUnit,那麼包含該功能的.o文件將具有調試信息,否則,不。

+0

感謝您的幫助。看起來我的圖書館有調試信息和lldb加載它,所以我沒有看到由於其他原因的來源。 – rightaway717

+0

圖像查找輸出的CompileUnit行中列出的源文件的文件路徑是我們從調試信息獲得的文件路徑。這是否與您用於調試的計算機上的源的實際位置相匹配? –