檢查程式對動態庫的依賴

來源:互聯網
上載者:User

轉載請註明出處: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).

總之,工欲善其事,必先利其器!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.