2012-03-01 93 views
1

我有下面的代碼: -調試執行工作正常,但正常的出現segfaults

void someFunc (someStruct* obj) { 
    cout << obj->some_member; 
} 

someFunc是一個回調,我從我無法控制庫獲得。如果我用gdbon = true編譯這個,那麼生成的exec就像它應該做的那樣工作。另一方面,如果我編譯它沒有上面的標誌,執行段錯誤。開放核心轉儲在gdb顯示

obj=Variable "obj" is not available. 

我如何能進一步縮小問題的範圍(或什麼有可能會是錯誤的)任何想法?

編輯: - 嘿原來這是一個沒有問題。在發佈版本的代碼中有一段不安全的內存訪問(具有優化和所有內容的代碼)似乎在gdb中成爲上述代碼行中的問題。 什麼是真正奇怪的是,我試圖做到這一點: -

void someFunc (someStruct* obj) { 
    if (obj==NULL) return; 
    cout<<"here1\n"; 
    cout<<obj->some_member; 
    cout<<"here2\n" 
} 

,這將隨機產生

here1 

有時和

here1 
here2 

一些其他時間。這有點混淆再次我有點... 但問題是其他地方......

+0

我發現這個很好的問題,一對夫婦的時刻張貼我自己的後。但似乎沒有幫助。 http://stackoverflow.com/questions/1762088/common-reasons-for-bugs-in-release-version-not-present-in-debug-mode – owagh 2012-03-01 16:47:53

+0

嘗試打印obj的值。即cout << obj。 – akhisp 2012-03-01 16:49:25

回答

1

嘗試下Valgrind的運行,應該給你一些線索