2012-01-04 30 views
4

當用gdb打開一個coredump時,gdb會嘗試將完整的coredump加載到內存中嗎?gdb巨量內存使用情況

我在其中一個分段系統上發現了一個大小爲35Gb的芯片。我們的操作說明要求使用gdb創建回溯。恐怕gdb會嘗試將完整的coredump加載到內存中,並通過使用所有可用的內存來呈現暫存區域不可用。

我們在RedHat EL 5/64bit安裝上使用gdb 7.0.1。

回答

3

當用gdb打開coredump時,gdb會嘗試將完整的coredump加載到內存中嗎?

恐怕GDB會盡量完整信息轉儲加載到內存和渲染臨時區域通過使用所有可用的內存無法使用。

即使沒有加載整個核心轉儲,GDB 消耗一些內存,所以你可能暫存系統的影響。如果您無法承擔影響,則需要修改您的「操作程序」,例如將核心移到不同的系統並在那裏分析。當心:如果您的可執行文件使用動態鏈接,則必須安排動態庫匹配正好在生成核心轉儲和分析時。

+0

有沒有一種方法來估計多少內存gdb將消耗?在這種環境下運行gdb和coredumps達到4Gb從來就不是問題。不幸的是,我從來沒有檢查過使用過多少內存。 – briconaut 2012-01-04 16:30:57

+0

「注意:如果您的可執行文件使用動態鏈接,則必須在生成核心轉儲和分析核心轉儲時準確匹配動態庫。」如果他們不是,會發生什麼?回溯至少會存在嗎? – 2012-01-05 21:36:31

+1

「如果不是,會發生什麼?」這取決於。如果你沒有捕捉到信號(例如打印信息),並且在系統庫中發生崩潰*而不是*,他們可能會得到堆棧跟蹤。否則,你可能會得到一個截斷的棧跟蹤,或者只是垃圾。 – 2012-01-06 01:31:50