在Linux上,我有一個使用dlopen()加載一些共享庫的C++應用程序,但我懷疑被加載的共享庫的版本不是我期望的版本,因爲我的調試跟蹤代碼沒有出現被執行。如何檢查正在運行的進程以查看它正在使用的共享庫?
是否有辦法檢查正在運行的進程以查詢它當前打開的所有共享庫以及每個這些庫的路徑?換句話說,類似於ldd
,但它適用於正在運行的可執行文件,並列出了運行時加載的庫。
在Linux上,我有一個使用dlopen()加載一些共享庫的C++應用程序,但我懷疑被加載的共享庫的版本不是我期望的版本,因爲我的調試跟蹤代碼沒有出現被執行。如何檢查正在運行的進程以查看它正在使用的共享庫?
是否有辦法檢查正在運行的進程以查詢它當前打開的所有共享庫以及每個這些庫的路徑?換句話說,類似於ldd
,但它適用於正在運行的可執行文件,並列出了運行時加載的庫。
如果你想知道一個程序已打開的庫文件,你可以試試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
希望它會幫助你。
不得不通過GDB運行一個程序,以保持足夠長的時間,但pmap做這項工作。謝謝! – dhardy 2013-09-16 11:32:47
嘗試'lsof的-p _process_id_' – stardust 2013-05-09 16:27:18
ķ這裏是一個完整的答案。 http://stackoverflow.com/questions/5103443/how-to-check-what-shared-library-is-loaded-at-run-time – stardust 2013-05-09 16:30:08