# 使用core dump除錯 目的: 使用core dump機制讓成是在收到一些信號如**SIGSEGV**之後產生對應的core dump file除錯錯誤發生的地方。 ## 設定ulimit > sudo vim /etc/security/limits.conf 加入以下內容 ```bash= * soft core unlimited ``` 設定大小為unlimited ```bash= ulimit -c unlmited() ``` ## 設定core dump 增加/etc/sysctl.conf底下兩行 ```bash= kernel.core_pattern = ./core-%e-%s-%t kernel.core_uses_pid = 1 ``` 使用以下指令寫入設定 ```bash= sudo sysctl -p ``` 之後可從/proc/sys/kernel/底下觀察**core_pattern**和**core_uses_pid**兩個檔案看到寫入的設定。 ## 程式編譯 編譯的時候需加入 **-g**才會出現core dump file。出現的core檔案會按照**kernel.core_pattern***裡面的格式生成core檔。 ## 用gdb觀察信號產生的錯誤 1. 會產生core dump的信號可以用**man 7 signal**指令查閱哪些信號會有會產生core dump檔案,如SIGSEGV。 2. 可以藉由gdb指令查看觸發信號的程式堆疊狀況。 ```bash= gdb -c exe_core exe (gdb) bt ``` ## epoch time轉換 在輸出的%t格式是epoch time,並不直覺。可以特過以下指令知道可讀性高且符合相對時區的時間的輸出格式。 ```bash= date -d @epoch_time ``` ## 參考資料 [1. Linux 下如何產生core檔案(core dump設定)](https://www.itread01.com/content/1547413206.html) [2. 開啟 core dump 與設定產生 core dump 的程式](https://ephrain.net/linux-%E9%96%8B%E5%95%9F-core-dump-%E8%88%87%E8%A8%AD%E5%AE%9A%E7%94%A2%E7%94%9F-core-dump-%E7%9A%84%E7%A8%8B%E5%BC%8F/0) [3. linux core dump 檔案 gdb分析](https://codertw.com/%E4%BC%BA%E6%9C%8D%E5%99%A8/155928/) [4. core](https://linux.die.net/man/5/core) [5. C 語言程式的記憶體配置概念教學](https://blog.gtwang.org/programming/memory-layout-of-c-program/) ###### tags: `linux` `core dump` `gdb`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up