2015-04-21 15 views
1

的文件名:無法改變我做了以下修改核心轉儲文件

  1. 編輯的文件/etc/security/limits.conf,使核心文件大小爲「無限」。使用顯示爲'unlimited'的命令#ulimit -c對其進行驗證。

  2. 所附文件/etc/sysctl.conf按照以下:
    $gcc -g pointer.c -o pointeraccess
    結果-編譯成功:
    kernel.core_uses_pid = 1
    kernel.core_pattern = /tmp/%e.core.%p
    fs.suid_dumpable = 2
    使用sysctl -p

  3. 編譯如下文件保存的更改

  4. 執行。在GDB如下文件:
    $gdb pointeraccess

得到一個算術異常後,將其輸出如下:

(GDB)運行

啓動程序:/media/anand/d258641a-8cc6-4fcf-96e4-

ce7a147cb34e/Imp ortant /調試工作區/ pointeraccess

編程接收信號SIGFPE,算術異常。

在pointeraccess.c主()0x08048477:13

13 I = I/0;

(GDB)的gcore

保存核心文件core.1880

我的問題是:爲什麼文件名是core.pid,而不是program_name.core.pid

+1

因爲它的gdb保存核心文件在你的情況下,而不是操作系統。請參閱gdb中的'help gcore'。 – mfro

+0

@mfro感謝您的理由和建議。但是,如何根據需要製作核心文件名?即** program_name。core.pid ** –

+1

你試過我的建議嗎?它會告訴你。 – mfro

回答

1

更新的核心模式:

echo "core.%e.%p" > /proc/sys/kernel/core_pattern

%e表示的二進制

使用上述模式的名字,我能夠擁有核心轉儲包含可執行文件的名稱和pid。

編輯:

在GDB之外運行會導致核心文件中的文件名。用GDB運行它,我想gcore能夠控制。

+0

我已經試過這個,但沒有改變。我在更改core_pattern文件後發佈輸出。 (gdb)運行 啓動程序:/調試工作區/ pointeraccess 編程接收到的信號SIGFPE,算術異常。 0x08048477在main()的pointeraccess.c中:13 \t i = i/0; (gdb)gcore 保存的核心文件core.3262 (gdb)quit 調試會話處於活動狀態。 \t劣等1 [過程3262]將被殺死。 無論如何退出? (y或n)y root @ anand-OptiPlex-9010:/調試工作空間#cat/proc/sys/kernel/core_pattern 核心。%e。%p –

+0

對我來說工作得非常好 - Linux 2.6/RHEL 6.1 – Prabhu

+1

嘗試在GDB之外運行並嘗試? – Prabhu