我正在致力于一个项目,我调用一个触发段错误的函数。我解决了这个问题,但是在这个过程中我注意到了以下几点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