linux下尋找段錯誤的方法

爲了可以快速找到發生段錯誤的地方,記錄如下兩種方法。html

objdump和backtrace的配合使用 :https://www.cnblogs.com/jiangyibo/p/9507555.html spa

 

代碼:test.c3d

 

1、命令addr2line:  addr2line -e '可執行文件名'  'dmesg打印的地址'調試

  編譯的時候必定要加「-g」  添加調試信息:gcc -g test.chtm

  生成的可執行文件a.out一運行就會報錯:Segmentation faultblog

  調用命令dmesg ,能夠查看系統啓動信息,其中最新的一行信息應該是段錯誤的描述信息,以下,ip後的地址就是發生段錯誤的地址。ip

  

  而後調用命令"addr2line -e a.out 0x8043db"就會打印出發生錯誤的文件和行號:內存

  

 

2、core dumpe文件:程序崩潰時會保存程序運行時的內存信息資源

  先使用 ulimit -a 查看目前資源限制的設定:get

  

  可查看到「core file size」的大小爲0,咱們設置成 200。

  而後再次 gcc -g test.c ,運行可執行文件a.out:

   

  ls能夠看到當前目錄下生成了「core」文件

  而後咱們 gdb a.out:

  

  能夠看到,一旦咱們run了以後,程序就會停在發生段錯誤的地方。

  或者執行 gdb a.out core ,gdb會自動運行並停在發生段錯誤的地方。

 

  通常調用ulimit -c X 設置的文件大小都是臨時有效,若是要設置永久有效,能夠修改/etc/security/limits.conf 文件, 找到 * soft core 0,修改成* soft core unlimited保存,這樣每次啓動時都會去讀取這個配置文件。

相關文章
相關標籤/搜索