AIX下core文件的分析


筆者曾在AIX系統下使用C語言開發多個應用系統。眾所周知,C語言編寫程序時容易出現內存使用不當的BUG,例如內存越界、使用野指針、內存未初始化等等。在程序運行時,這些BUG很可能造成程序崩潰,但在測試時往往又無法重現問題。此類問題往往讓開發者大傷腦筋,在老板和客戶的追殺下無地自容,恨不得一死了之。

image

幸好,當程序崩潰時,AIX會自動產生一個core文件,該文件保存了進程崩潰時的運行環境,包括當時的函數調用堆棧、棧內存、堆內存等。

將core文件復制到開發環境,使用命令

$ file core

可顯示core文件是由哪個進程產生。

將core文件與該進程的文件放到同一路徑下,使用命令

$ dbx 進程文件

即可進入dbx調試器,並將此進程文件產生的core文件打開。

此時使用dbx命令

> where

可看到當前的函數調用堆棧(如果調用堆棧還沒有被破壞),即可知道程序運行到哪個函數時崩潰了。如果編譯時使用了 –g 參數,則還可以看到源碼文件名與行序號。

如果出現內存越界的錯誤,往往調用堆棧已被破壞,此時使用 where 命令看不到調用的函數。這種情況下往往會讓大多數程序員束手無策。不過,我們仍然可以通過分析core文件中的內容,獲得進程崩潰時的運行數據。在dbx中使用命令

> coremap

可看到此core文件中當前的內存布局。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM