轉載請註明出處:http://blog.csdn.net/horkychen
測試程式時會出現找不到指定的庫或庫函數的錯誤,表示某個依賴庫不存在或版本不正確。如果使用的是動態載入的動態庫所依賴的包不存在,如果程式沒有做好異常處理的話,會讓你很難定位到問題。比如GDI+庫。假設一個程式A,調用了動態庫B,而B連結了GDI+,這時運行在Windows 2000上時,系統裡沒有GDI+的庫,會導致A不斷Crash掉。因為GDI+庫不是一般C的動態庫,一般沒有庫載入的動作,使得排查問題會有很多的障礙。
這時,我們如果利用依賴關係的查看工具就可以容易判斷出來。在Linux中可以使用ldd指令很容易地獲得依賴包資訊。而在Windows中,就可以使用Dpendency Walker,一個曾經包在Visual Studio 6中的工具。
下面是一個樣本。這個程式是使用Cygwin編譯的,在沒有Gygwin的環境下運行不了,因為缺少了依賴的庫。
:http://dependencywalker.com/
不得已的時候也可以使用命令列的方式執行。比如下面的指令:
depends -c -f:0 -u:1 -pa:1 -pf:1 -pe:1 -pl:1 -pg:1 -sm:12 -sf:4 -ot:result.txt D:\Project\UnixTools\assert.exe
IDE調試而不斷加入Debug資訊的時候,或許它能幫你一把。
在程式運用有時需要查看一下當前程式載入了哪些庫,推薦Process Explorer。它是一個比較全面的工具。可以快速定位程式,支援單獨查看單個進程的CPU及記憶體佔用情況等。
還有一個輕量級的工具可以使用:CurrProcess,來自一家很牛的技術公司:NirSoft。
在Linux和Mac OS下系統提供的工具就可以做到。Mac OS 下是Activity Monitor, 在Linux下(Debian)是System Monitor或者如下的命令列:
cat /proc/<pid>/maps (至於細節,可以參考:http://blog.csdn.net/z_man/article/details/3839677)
下面是兩個系統下的:
Activity Monitor in Mac OS
*(雙擊選中的進程)
System Monitor in Linux:
*(右擊選中的進程,選擇Maps).
總之,工欲善其事,必先利其器!