2011-07-24 148 views
1

我正在運行CentOS作爲其操作系統的PC上工作。 我也在嵌入式操作系統上工作。未生成核心轉儲

在我的電腦,我成功通過改變來創建分割故障核心轉儲文件:

  1. 核心圖形
  2. core_uses_pid
  3. 的ulimit -c無限
  4. 的sysctl -p

但在嵌入式系統上沒有任何工作 - 核心轉儲不會生成!可能是什麼原因?

如果很重要,我想轉儲的應用程序是用C++編寫的。

如何才能在嵌入式系統上獲得核心轉儲?


我做了一個小小的崩潰程序,核心轉儲是從崩潰程序生成的,但不是爲我需要的! 所以問題不在於O.S,而是在於具體的程序。 我發現在將-g可執行文件/庫文件發送到嵌入式系統之前,我們會刪除-g文件。我對我的應用程序做了同樣的處理,而且這個文件仍然產生核心轉儲。

+0

是您的程序setuid或setgid?如果是這樣,'/ proc/sys/fs/suid_dumpable'的內容是什麼? – Hasturkun

+0

我的計劃是不setuid或setgid,如果你的意思是ls -l命令答案開始以S 和要求文件1 – davidbobo

+0

OK,另外,它使用'個seteuid()'或'setguid()'功能隨時隨地爲?因爲默認情況下這會使其不可打印。如果是,嘗試做'回聲2>的/ proc/SYS/FS/suid_dumpable'這可能使人們有可能進行核心轉儲 – Hasturkun

回答

4

您確定您的嵌入式系統上的內核支持核心轉儲嗎?內核版本(ref)可以禁用該功能,在這種情況下,您可能必須使用類似google-coredumper的東西來僞裝它。

+0

+1,很好的參考 – dolphy

+0

確定 - 在鏈接ü給我,這是寫入改變ELF ...轉至常規設置。我不知道通用設置在哪裏聽起來像GUI。我沒有gui,我在嵌入式系統上工作。 THX – davidbobo

+0

@davidbobo:在內核配置,從內核源目錄中運行'使menuconfig',享受你的CLI。不要忘記重建你的內核。 – Hasturkun

0

好吧,

我犯了一個小錯誤,當我檢查我的電腦上療法程序,我已經比嵌入式系統上的另一個信號,來檢查它。自定義信號處理程序爲什麼還有一個問題,那就是沒有核心轉儲。 解決方法是在其中一個鏈接:

不幸的是,如果您的應用程序配備了定製的信號處理程序,不會產生核心轉儲,因爲它是由系統默認的信號處理程序纔會生成。如果您的應用程序具有自定義信號處理程序,請在開始調試之前將其禁用,否則將不會生成核心轉儲。互聯網中的一些資源提到,在發生異常之後恢復信號處理程序內的默認信號處理程序,並在環回中再次發送它可能會觸發核心轉儲。在我做的測試中,它確實生成了一個核心轉儲,但我在覈心轉儲中看到的唯一一件事是我的處理程序執行的代碼(即調用信號和殺死),所以這對我沒有幫助。也許在其他平臺上這個技巧效果更好。

在我的平臺上它工作 - 另一個解決方案將在信號處理程序中生成核心轉儲。我聽說gcore可以做到這一點,與Windows核心我有一個錯誤不兼容。