2011-07-06 224 views
5

我已經爲項目編寫了自定義核心轉儲處理應用程序。我改變了'/ proc/sys/kernel/core_pattern'來調用我的轉儲處理程序併成功調用它。核心轉儲文件格式

現在的問題是將core-dump保存到gdb可以識別的文件中。目前,我的轉儲處理程序從STDIN中讀取轉儲並將其保存到文件'core.dump'中。當我嘗試加載這個核心轉儲到GDB它給我的錯誤:

(gdb) ... is not a core dump: File format not recognized

當我運行在一個標準的核心「文件」命令轉儲它給我以下內容:

core: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './dump_gen'

而對於自定義生成轉儲, '文件' 給出如下:

core.dump: data

請任何人都可以幫助我如何正確寫入core-dump,以便它可以在gdb中使用。

PS:我不想使用標準的核心轉儲文件。

回答

4

的ELF規範,我認爲你有點不寫的所有數據到核心文件。

創建一個簡單的腳本,使其可執行並將核心模式設置爲腳本。

#!/bin/sh 
cat > /tmp/core.$$ 

現在生成一個核心轉儲文件(例如運行sleep 1243並按ctrl+\),它應該工作。

我剛剛在我的系統上自己測試過它,它沒有問題。

+0

感謝您的快速響應。我檢查了你的方法,它的工作,所以我看着我的C代碼,並發現將數據複製到緩衝區的錯誤。有效。 – AvadhP

+1

我也面臨同樣的問題,但只是想知道以上步驟會做什麼?它會產生一個新的核心轉儲,可以作爲參數傳遞給gdb?謝謝! – sad

4

首先要檢查的是Elf標題標誌,它表示它是什麼類型的文件。它有四個值 - 共享對象,未鏈接的對象,可執行文件和核心轉儲。這很可能是導致gdb錯誤的原因。

此外,請嘗試使用objdump檢查它 - 它可以將整個ELF文件分解爲哪些部分顯然不是很好。

你可以找到http://refspecs.freestandards.org/elf/elf.pdf