CoreDump學習記錄

2021-08-07 13:08:50 字數 1229 閱讀 5267

coredump基礎知識,已經有比較完善的介紹,參照tenfyguo部落格:詳解coredump

do_coredump流程詳解:

這裡我只做自己的理解與學習記錄

1.發生環境,coredump是核心掛掉後產生的乙個記錄上下文環境的檔案;

2.它生成的位置是由 /proc/sys/kernel/core_patten 決定的,預設為core,為了避免被覆蓋,一般修改為/data/coredump/core-%e-%p;

3.本人接觸到的coredump產生方式為sigsegv 訊號導致,可以通過訪問非法指標,手動建立出生成這個訊號;

4.coredump 功能對應的核心函式位置是 kernel/fs/core_dump.c do_coredump函式;

問題已定位:

1. 主要問題出在乙個debuggerd守護程序上面,debuggerd會在每次出發coredump的情況下會去/data/corefile/目錄下查詢core**檔案個數,如果大於4個,就會給/proc/sys/kernel/core_pattern賦值為/dev/null。

2. 接下來還需要確認的東西。1) do_coredump流程 2) 如何修改debuggerd程序

有個問題很糾結:

問題:到底do_coredump的open操作是如何完成的?

695 這個開啟檔案的方式到底是什麼? 查詢資料(web & man)說(o_creat | o_excl)這兩個標誌位同時存在時,open對應的檔案如果存在就會報錯,返回-1,而且我也自己嘗試過了,確實如此;.

o_excl ensure that this call creates the file: if this flag is specified in conjunction with o_creat, and pathname already exists, then open() will fail.

但是coredump的機制不是如果檔案存在就覆蓋掉原有檔案嗎? 我也在do_coredump加了列印資訊,695行的open函式就返回0,鬱悶。

**:fs/coredump.c

636         int open_flags = o_creat | o_rdwr | o_nofollow |

637                  o_largefile | o_excl;

695             cprm.file = filp_open(cn.corename, open_flags, 0600);

GDB之coredump的學習

在linux環境下執行程式的時候有的時候會出現一些問題,這個時候就可以使用gdb工具進行除錯,以下是公司實習期間學習gdb的一些總結。1 gdb的簡介 gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。一般來說,gdb主要完成以下四個方面的功能 1 啟動你的程式,可以按照你的自定義的要...

關於程式coredump

經常聽到大家說到程式core掉了,需要定位解決,這裡說的大部分是指對應程式由於各種異常或者bug導致在執行過程中異常退出或者中止,並且在滿足一定條件下會產生乙個叫做core的檔案。要產生coredump檔案,首先需要確認當前會話的ulimit c,若為0,則不會產生core檔案。可以這樣設定 uli...

Coredump除錯方法

1.想要除錯coredump程式,需要先保證程式crash時能生成coredump檔案。導致coredump檔案無法生成的因素,最常見為檔案大小限制。root work ulimit c 檢視檔案限制設定情況 unlimited root work ulimit c 256000000 指定乙個較大...