2013-05-09 51 views
5

在Linux上,我有一個使用dlopen()加載一些共享庫的C++應用程序,但我懷疑被加載的共享庫的版本不是我期望的版本,因爲我的調試跟蹤代碼沒有出現被執行。如何檢查正在運行的進程以查看它正在使用的共享庫?

是否有辦法檢查正在運行的進程以查詢它當前打開的所有共享庫以及每個這些庫的路徑?換句話說,類似於ldd,但它適用於正在運行的可執行文件,並列出了運行時加載的庫。

+1

嘗試'lsof的-p _process_id_' – stardust 2013-05-09 16:27:18

+3

ķ這裏是一個完整的答案。 http://stackoverflow.com/questions/5103443/how-to-check-what-shared-library-is-loaded-at-run-time – stardust 2013-05-09 16:30:08

回答

7

如果你想知道一個程序已打開的庫文件,你可以試試pmap。 例如,如果我們想知道的是bash進程3860已經打開的庫,其結果可能是:

3860: bash 
08048000 880K r-x-- /bin/bash 
08124000  4K r---- /bin/bash 
08125000  20K rw--- /bin/bash 
0812a000  20K rw--- [ anon ] 
099ae000 348K rw--- [ anon ] 
b715c000  44K r-x-- /lib/i386-linux-gnu/libnss_files-2.15.so 
b7167000  4K r---- /lib/i386-linux-gnu/libnss_files-2.15.so 
b7168000  4K rw--- /lib/i386-linux-gnu/libnss_files-2.15.so 
b7169000  88K r-x-- /lib/i386-linux-gnu/libnsl-2.15.so 
b717f000  4K r---- /lib/i386-linux-gnu/libnsl-2.15.so 
b7180000  4K rw--- /lib/i386-linux-gnu/libnsl-2.15.so 
b7181000  8K rw--- [ anon ] 
b7183000  28K r-x-- /lib/i386-linux-gnu/libnss_compat-2.15.so 
b718a000  4K r---- /lib/i386-linux-gnu/libnss_compat-2.15.so 
b718b000  4K rw--- /lib/i386-linux-gnu/libnss_compat-2.15.so 
b71a1000  4K r---- /usr/lib/locale/locale-archive 
b71a2000 1428K r---- /usr/lib/locale/locale-archive 
b7307000 2048K r---- /usr/lib/locale/locale-archive 
b7507000  4K rw--- [ anon ] 
b7508000 1676K r-x-- /lib/i386-linux-gnu/libc-2.15.so 
b76ab000  8K r---- /lib/i386-linux-gnu/libc-2.15.so 
b76ad000  4K rw--- /lib/i386-linux-gnu/libc-2.15.so 
b76ae000  16K rw--- [ anon ] 
b76b2000  12K r-x-- /lib/i386-linux-gnu/libdl-2.15.so 
b76b5000  4K r---- /lib/i386-linux-gnu/libdl-2.15.so 
b76b6000  4K rw--- /lib/i386-linux-gnu/libdl-2.15.so 
b76b7000 112K r-x-- /lib/i386-linux-gnu/libtinfo.so.5.9 
b76d3000  8K r---- /lib/i386-linux-gnu/libtinfo.so.5.9 
b76d5000  4K rw--- /lib/i386-linux-gnu/libtinfo.so.5.9 
b76d8000  28K r--s- /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache 
b76df000  40K r-x-- /lib/i386-linux-gnu/libnss_nis-2.15.so 
b76e9000  4K r---- /lib/i386-linux-gnu/libnss_nis-2.15.so 
b76ea000  4K rw--- /lib/i386-linux-gnu/libnss_nis-2.15.so 
b76eb000  8K rw--- [ anon ] 
b76ed000  4K r-x-- [ anon ] 
b76ee000 128K r-x-- /lib/i386-linux-gnu/ld-2.15.so 
b770e000  4K r---- /lib/i386-linux-gnu/ld-2.15.so 
b770f000  4K rw--- /lib/i386-linux-gnu/ld-2.15.so 
bfbbf000 132K rw--- [ stack ] 
total  7152K 

希望它會幫助你。

+0

不得不通過GDB運行一個程序,以保持足夠長的時間,但pmap做這項工作。謝謝! – dhardy 2013-09-16 11:32:47

相關問題