我正在致力於一個項目,我調用一個觸發段錯誤的函數。我解決了這個問題,但是在這個過程中我注意到了以下幾點G ++編譯器:Segfault處理
當我的代碼是格式;
main(){
...
std::cout << "Looking for segfault\n"; // this does not print
buggyFunction(); // crashes in here
...
}
buggyFunction(){
...
thing_that_causes_segfault;
...
}
線「尋找段錯誤」不打印到性病,並在buggyFunction程序崩潰。很好,但是當我在buggyFunction()中添加一個cout行時;
main(){
...
std::cout << "Looking for segfault\n"; // this now *does* print
buggyFunction();
...
}
buggyFunction(){
...
std::cout << "Now we're INSIDE buggy function\n"; // this prints too
thing_that_causes_segfault;
...
}
在越野車功能,兩行打印(然後它崩潰)。
爲什麼我們在輸出中看到這種差異,取決於額外的輸出呼叫的增加?它與流處理有關還是其他?我正在使用g ++(Ubuntu 4.4.3-4ubuntu5)4.4.3。
或者,您可以用'的std :: cerr',這是無緩衝(大概爲錯誤報告的目的)。 –
即使使用「std :: endl」而不是「\ n」,仍然不能保證該行將被打印,但是使用'std :: endl'打印行的機率更好。兩個原因爲什麼這仍然可能無效:(1)可能還有其他緩衝正在進行,(2)SEGFAULT是對某種未定義行爲的迴應。對於未定義的行爲沒有保證。 –
D'OH!我以前有一個endl(專門用來刷新流),但是在調試的某個時候它已經被刪除了,我忘了重新放入 - 我很少使用\ n。 – Alex