亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調試客戶包裝盒上生成的核心文件

調試客戶包裝盒上生成的核心文件

有只小跳蛙 2019-10-31 13:19:52
通過在客戶的機器上運行我們的軟件,我們可以獲得核心文件。不幸的是,由于我們一直使用-O2 進行編譯,而沒有調試符號,這導致了無法弄清崩潰原因的情況,我們修改了構建,現在它們一起生成-g和-O2。然后,我們建議客戶運行-g二進制文件,以便于調試。我有幾個問題:當從Linux發行版生成核心文件而不是我們在Dev中運行的核心文件時,會發生什么情況?堆棧跟蹤是否有意義?在Linux或Solaris上有調試的好書嗎?面向示例的東西很棒。我正在尋找現實生活中的例子,以弄清例程為什么崩潰以及作者如何得出解決方案。中級到高級的東西會更好,因為我已經做了一段時間了。進行一些組裝也是很好的。這是一個崩潰的示例,它要求我們告訴客戶獲得-g版本。的二進制:Program terminated with signal 11, Segmentation fault.#0  0xffffe410 in __kernel_vsyscall ()(gdb) where#0  0xffffe410 in __kernel_vsyscall ()#1  0x00454ff1 in select () from /lib/libc.so.6...<omitted frames>理想情況下,我想解決以找出導致應用程序崩潰的原因-我懷疑這是內存損壞,但我不是100%肯定。嚴格禁止遠程調試。謝謝
查看完整描述

3 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

實際上,您可以從崩潰轉儲中獲得有用的信息,甚至可以從優化的編譯中獲得有用的信息(盡管從技術上來說,這就是所謂的“大麻煩”。)-g編譯確實更好,是的,甚至您也可以這樣做。當發生轉儲的機器是另一個發行版時?;旧?,只有一個警告,所有重要信息都包含在可執行文件中,并最終在轉儲中。

當您將核心文件與可執行文件進行匹配時,調試器將能夠告訴您崩潰發生的位置并向您顯示堆棧。這本身應該會有所幫助。您還應該盡可能多地了解它發生的情況-他們可以可靠地復制它嗎?如果是這樣,您可以復制它嗎?

現在,這是一個警告:“一切都存在”的概念被分解的地方是共享對象文件,.so文件。如果由于這些問題而失敗,那么您將不需要所需的符號表;您可能只能看到.so它發生在什么庫中。

有很多關于調試的書,但是我想不出我推薦的書。


查看完整回答
反對 回復 2019-10-31
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

檢查遍歷堆棧時看到的局部變量的值?特別是在select()調用周圍。在客戶的箱子上執行此操作,只需加載轉儲并遍歷堆棧...


另外,還要在DEV和PROD平臺上檢查FD_SETSIZE的值!


查看完整回答
反對 回復 2019-10-31
  • 3 回答
  • 0 關注
  • 540 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號