2012-08-28 30 views
0

Windows有一個漂亮的工具 - Dependency Walker - 列出了可執行文件中使用的所有符號以及加載它們的動態庫。這對了解丟失的符號& DLL非常有用。列出在運行時加載的所有符號

* nix/Solaris是否有類似的工具。雖然我們可以通過ldd和nm的組合來發現這一點,但單個工具將非常方便。

+2

爲什麼不使用'nm' /'ldd'輸出你想要的信息,然後你就可以發佈一個腳本?請記住,今天幾乎所有偉大的開源軟件都是因爲開發人員「搔癢」而發生的。 :) –

+0

@Joachim:不能達成一致;無論使用簡單的UN * X管道和小型shell別名或腳本如何發生...... –

回答

0

使用dbx連接到pid,並使用funcs命令列出加載的符號。

$ dbx "-c funcs; quit " /usr/bin/bash 4837 

Reading bash 
Reading ld.so.1 
Reading libcurses.so.1 
Reading libsocket.so.1 
Reading libnsl.so.1 
Reading libdl.so.1 
Reading libc.so.1 
Attached to process 4837 
stopped in _waitid at 0xfee0af95 
0xfee0af95: _waitid+0x0015:  jae  _waitid+0x21 [ 0xfee0afa1, .+0xc ] 
`bash`_start 
`bash`_mcount 
`bash`__fsr 
`bash`main 
`bash`exit_shell 
`bash`sh_exit 
... 
`libnsl.so.1`nis_sperror 
`libnsl.so.1`nis_lerror 
`libnsl.so.1`__nis_group_cache_stats 
... 
`libc.so.1`mmap64 
`libc.so.1`_mmap64 
`libc.so.1`_init 
`libc.so.1`_fini 
detaching from process 4837 
+0

感謝您的迴應。這也可以使用gdb(對於不使用dbx的用戶) - 'info types'命令來完成。實際上,我正在尋找一種工具,可以告訴我們哪些符號和符號缺失。我猜gdb/dbx只有在程序可以加載成功的情況下才能工作。 – gammay