0
Windows有一個漂亮的工具 - Dependency Walker - 列出了可執行文件中使用的所有符號以及加載它們的動態庫。這對了解丟失的符號& DLL非常有用。列出在運行時加載的所有符號
* nix/Solaris是否有類似的工具。雖然我們可以通過ldd和nm的組合來發現這一點,但單個工具將非常方便。
Windows有一個漂亮的工具 - Dependency Walker - 列出了可執行文件中使用的所有符號以及加載它們的動態庫。這對了解丟失的符號& DLL非常有用。列出在運行時加載的所有符號
* nix/Solaris是否有類似的工具。雖然我們可以通過ldd和nm的組合來發現這一點,但單個工具將非常方便。
使用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
感謝您的迴應。這也可以使用gdb(對於不使用dbx的用戶) - 'info types'命令來完成。實際上,我正在尋找一種工具,可以告訴我們哪些符號和符號缺失。我猜gdb/dbx只有在程序可以加載成功的情況下才能工作。 – gammay
爲什麼不使用'nm' /'ldd'輸出你想要的信息,然後你就可以發佈一個腳本?請記住,今天幾乎所有偉大的開源軟件都是因爲開發人員「搔癢」而發生的。 :) –
@Joachim:不能達成一致;無論使用簡單的UN * X管道和小型shell別名或腳本如何發生...... –