2013-12-21 63 views
0

我們有一位報告AIX服務器崩潰的客戶,他們爲我們提供了核心轉儲。 核心轉儲由發佈庫和可執行文件生成。如何在使用dbx分析核心轉儲時連接源代碼

現在,如果我使用dbx來分析它,我無法獲得行號。

有沒有辦法將源代碼附加到dbx?我可以用調試信息重新編譯庫和可執行文件,然後將它們加載到dbx,這樣可以工作嗎?

或者我需要給客戶一個我們的庫和可執行文件的調試版本,讓他們重現崩潰併發送你的核心轉儲?

回答

0

核心文件需要與您嘗試附加dbx的同一個可執行文件匹配。如果你需要調試符號,你需要讓客戶運行一個調試版本(用-g編譯,未被刪除),並向你發送該崩潰產生的核心。

擁有dbx顯示源是另一步,see the -I option or "use" command將dbx指向與您的調試版本關聯的源文件。

請注意,我經常發現在調試vs發佈版本中不會發生崩潰。有時會令人沮喪。

如果您特別喜歡冒險,可以使用「where」(顯示該函數中的當前函數和偏移量)組合來顯示彙編器。從源文件生成彙編程序(來自xlc的-S選項),您可以非常接近C/C++語句導致該問題的地方。在嘗試重新創建在生產環境中轉儲核心時沒有進行調試構建的情況下,我已經做了很多次這樣的事情。

祝你好運!

+0

還有一個問題:我們有一個可執行文件和一些庫(.a文件),如果崩潰發生在libs中,我們可以只部署該lib的調試版本嗎?我們是否也需要部署調試可執行文件? – performanceuser

+0

我在問,因爲我們無法複製它,它只發生在客戶的env – performanceuser