我正在努力将Visual C++应用程序移植到GCC(应该建立在MingW和Linux上).
现有的代码__try { ... } __except(1) { ... }
在几个地方使用块,所以几乎没有(可能没有内存类型错误?)会使程序退出而不做一些最小的日志记录.
与GCC做类似的事情有哪些选择?
编辑:感谢Visual Studio中指向/ EH选项的指针,我现在需要的是关于如何在Linux上处理信号的一些示例.我从2002年发现了这条消息.
还有什么其他信号SIGFPE
,SIGSEVG
我应该注意什么?(主要是关心可能从我做错的事情)
赏金信息:我希望我的应用程序能够在退出之前自动记录尽可能多的错误条件.
我可以得到什么信号,以后通常无法记录错误信息?(内存不足,还有什么?)
如何以可移植的方式处理异常和(最重要的)信号,使得代码至少在Linux和MingW上运行相同.#ifdef没问题.
我不仅仅有一个记录失败的包装进程的原因是出于性能原因我将一些数据保存到磁盘直到最后一分钟,所以如果出现问题我想尽可能多地尝试将数据写出来退出.
try {xxx} catch(...){xxx}会更便携,但可能不会那么多.这取决于编译器设置和环境.
使用默认的VC++设置,异步(SEH)错误不会传递到C++ EH基础结构; 为了捕获它们,你需要使用SEH处理程序(__try/__除外).VC++允许您通过C++错误处理来路由SEH错误,这允许catch(...)捕获SEH错误; 这包括内存错误,如空指针解引用. 细节.
但是,在Linux上,Windows使用SEH的许多错误都是通过信号指示的.这些都没有被try/catch捕获; 要处理它们,你需要一个信号处理程序.