Linux

如何查看核心文件(一般)

  • March 9, 2019

場景(Ubuntu 16.04)

我編譯並執行一個 C 程序(使用-g,我得到了傳統的Segmentation Fault (core dumped),然後(當然)沒有找到神話般的“核心”文件。一些探勘說/proc/sys/kernel/core_pattern用命令修改為:echo '|tee /home/me/my_core_folder/my_core_file' | sudo tee /proc/sys/kernel/core_pattern,然後做這個,我停止得到(core dumped),開始只得到平原。我嘗試了顯然不存在的Segmentation Fault事情(我變得絕望),當然嘗試平原,然後是我拼命嘗試發送垃圾郵件的命令的變體獲得自動完成功能,讓我到達我需要去的地方。gdb ./program_object_file.out core.pid``gdb ./a.out``(gdb) core core.pid``tab

問題:

有沒有一種通用的方法可以獲取核心轉儲?我認識到,我接觸的每台機器似乎都具有邁克爾·貝的變形金剛式的重新配置硬體和軟體的能力,因此我擁有的任何設備都不能開箱即用地正常工作。我可以遵循一個簡單的算法/食譜來在我自己的機器以及其他人的機器上定位核心轉儲嗎?我總是發現自己在做大量工作以使事情為自己工作之後,就這樣的事情輔導朋友,如果能夠執行命令或其他東西將核心文件轉儲到執行執行檔的目錄中,那就太好了…有什麼方法可以在大多數(我會選擇“一些”)Linux / Unix機器上工作嗎?

core(5)手冊頁詳細描述了影響核心轉儲的參數,包括它們的命名等。

要回答您提出的問題,沒有通用的方法可以找到核心轉儲。預設情況下,核心轉儲在程序的目前工作目錄中,如果允許程序在那裡寫入,如果包含的文件系統上有足夠的空間,如果沒有現有的核心轉儲(在某些情況下),以及文件大小和核心文件大小限制(由ulimit或類似機制設置)允許它。但是/proc/sys/kernel/core_pattern提供了許多不同的處理核心轉儲的方法,所以你真的需要看看它並弄清楚發生了什麼。

在您的情況下,我不知道為什麼最初找不到核心,但我知道為什麼您在設置重定向後停止獲取核心:在使用管道時,必須使用絕對路徑名指定core_pattern處理程序. 不會單獨使用;您需要指定. 請注意,您應該特別注意多使用者系統上的此類設置,因為用於處理核心轉儲的程序執行為.tee``/usr/bin/tee``root

在我安裝的 Debian 衍生產品上corekeeper,它以一種易於使用的方式將核心轉儲寫入/var/crash.

引用自:https://unix.stackexchange.com/questions/316348