看板 LinuxDev 關於我們 聯絡資訊
※ 引述《Falldog (嘿嘿~)》之銘言: : 因為會發生segmentation fault時 系統會send出signal SIGSEGV : 現在想先暫時將此signal忽略掉 繼續執行程式 : 不知有何妙方可以??? : 我試過 : void getSegmentFault(){ ... } : int main(){ : signal( SIGSEGV, (sig_t)getSegmentFault ); : ... : } : 卻會不停地不停地收到SIGSEGV....囧rz... fault 發生後,必須處理過造成 fault 的原因,再返回程式執行 返回程式後,會重新執行 faulting instruction 以 page fault 為例,kernel 會為程式配置好該 page 再返回程式執行 重新執行 faulting instruction 時,就不會再引起 page fault segmentation fault,預設的行為就是終止程式 如果你想忽略它的話,可在 signal handler 處理 segv_handler(){ longjmp(); } void foo(){ if( !setjmp()){ // do_something } else{ // exception handling } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.27.81
Falldog:感謝你~ :) 07/24 14:02
ji3g45j:這個segmentation fault絕對不能忽略... 07/24 23:13
COLDTURNIP:segfault 在規格上是不能被另訂 handler 的 11/11 14:40