我正在對報告的程式進行除錯:
Thread 1 "test.out" received signal SIGSEGV, Segmentation fault.
然后我 gdbed 程式,發現程式SignalHandler在呼叫指令之后立即跳轉到一個函式call 0x401950。
我測驗了呼叫目的地 rax、rdi 和 rsi(呼叫輸入)。然而并沒有發現什么奇怪的東西。
我以前沒有遇到過這種情況,我猜是由于某些豁免而創建了一個軟中斷,然后安排在指令之后。所以實際問題可能會更早出現。
現在我需要找出豁免的上升點,以便我可以解決它。但我不知道如何做。
因此,我來??詢問是否有人可以幫助我。
很抱歉沒有顯示代碼,因為它是公司資產.....
感謝任何幫助的人!!!
uj5u.com熱心網友回復:
然后我 gdbed 程式,發現程式在呼叫指令呼叫 0x401950 之后立即跳轉到 SignalHandler 函式。
你沒有說你使用的是哪個處理器和作業系統。猜測 Linux 和x86_64,你有一個堆疊溢位。
該CALL指令將回傳地址壓入堆疊,SIGSEGV如果您的堆疊已用完,將執行此操作。
(gdb) where您可以通過使用(這可能顯示出非常深的遞回,但也可能是堆疊耗盡的其他原因)和查看的值RSP(應該正好在頁面邊界下方)來確認這個猜測。
根據堆疊大小的設定方式,ulimit -s unlimited在呼叫程式之前使用可能會解決此崩潰問題(盡管您確實應該通過其他一些機制來修復根本原因)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/436161.html
上一篇:將subdomain.domain.com重寫為domain.com/subdomain而無需重定向
下一篇:Phaser3:顯示可互動區域
