2008-09-22 87 views
17

我用的pstack分析在Solaris中Solaris核心轉儲分析

核心轉儲文件,我還能如何分析從solaris的核心轉儲?

什麼命令可以用來做到這一點?

轉儲中還有哪些其他信息可用?

回答

17

您可以使用Solaris模塊化調試器,mdb或dbx。 mdb隨附SUNWmdb(或64位版本的SUNWmdb x)軟件包。

核心文件是正在運行的進程崩潰時的映像。

根據您的應用程序是否使用調試標誌進行編譯,您將能夠查看堆棧的圖像,從而知道哪個函數導致了內核,以獲取傳遞給該內核的參數的值函數,變量的值,分配的內存區...

在最近的solaris版本上,您可以配置coreadm命令所包含的核心文件的內容;例如,您可以擁有該進程所連接的映射內存段。

參照MDB documentationdbx documentation。一旦你瞭解了GDB的基礎知識,GDB quick reference卡也很有幫助。

+2

Solaris模塊化調試器非常棒,與libumem一起使用是一個非常強大的工具。 http://blogs.sun.com/pnayak/entry/finding_memory_leaks_within_solaris – Matt 2009-07-30 03:14:44

+0

本博客可幫助您使用mdb分析Solaris中的coredump:http://cuddletech.com/blog/pivot/entry.php?id=965 – 2010-06-18 08:13:54

1

pflags命令對確定每個線程在覈心轉儲時的狀態也很有用。通過這種方式,您可以經常查明問題。

1

附加到處理圖像使用dbx調試器:

DBX [executable_file_name] [coredump_file_name]

重要的是,有可執行沒有變化,因爲芯被傾倒(即:這不是什麼重建)。

您可以看到堆棧跟蹤,以查看程序與dbx命令「where」碰撞的位置。

您可以使用「向上」和「向下」命令上下移動堆棧,或使用「frame [number]」跳轉到確切的堆棧幀,其中在「where」的輸出中顯示數字。

您可以使用「print [expr]」命令打印變量或表達式的值。

玩得開心。

3

如果核心轉儲來自您編寫或構建的程序,請使用您通常用來調試正在運行的應用程序的調試器。他們應該都能夠加載核心文件。如果您對調試器不挑剔,並且您使用的是Solaris,那麼我會推薦dbx。這將有助於使用修補程序獲取Sun Studio的最新FCS版本,或者使用Sun Studio的最新Express版本。如果可以在創建核心文件的同一系統上將核心文件加載到調試器中,這也非常有幫助。如果庫中的代碼與創建核心文件時不同,那麼堆棧跟蹤在通過庫時將不會有用。調試器還使用操作系統幫助程序庫來了解libthread和運行時鏈接程序數據結構,因此如果需要將核心文件加載到其他計算機上,則需要確保操作系統上安裝的幫助程序庫與系統數據結構匹配操作系統。您可以在幾年前撰寫的白皮書中找到關於這些系統庫不想了解的所有內容。

http://developers.sun.com/solaris/articles/DebugLibraries/DebugLibraries_content.html

3

我想任何回答這個問題,應該用一個簡單的食譜開始:

對於dbx的,配方是:

% dbx a.out core 
(dbx) where 
(dbx) threads 
(dbx) thread [email protected] 
(dbx) where 
1

我發現DBX在我的Solaris x86上框

/opt/SUNWspro/bin/dbx 

乾杯!

1

我建議首先嚐試gdb,因爲在我看來,它比原生Solaris調試器更容易學習基本任務。