该如何定位未定义的异常
最近做的东西,运行大概20分钟就崩溃死掉,但却捕获不到异常。
该项目开发平台vs2010,用到opencv2.4.6,不管是catch cv::exception还是catch ...,都无法进入catch的代码,大神求指教啊
[解决办法]
奔溃掉了不代表就有exception
[解决办法]
堆栈溢出,这种,不会有任何异常
[解决办法]
windows下试试用windows提供的异常处理SEH看看能不能捕获。
[解决办法]
崩了以后没出个对话框什么的,有个 debug 按钮,点了以后可以调试的。
[解决办法]
try catch貌似抓不到非标准异常的,linux处理崩溃问题可以考虑捕获信号,在易错函数外面设jump标记,抓到信号时跳回来,然后写个标准异常throw出去,就可以拿到堆栈啦。
[解决办法]
貌似可以参考这个 http://bbs.csdn.net/topics/390565610
[解决办法]
catch默认情况下只负责捕获throw异常(或者直接throw,或者调用的某个函数内部throw)。结构化异常是不捕获的。
[解决办法]
Windows:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
Linux:
进程意外退出会在当前目录下产生‘code’文件或形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core或core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令