有时程序中有未捕获的异常会致使程序异常的行为甚至致使程序的直接退出。 这对服务器程序来讲是不可接受的。服务器
可使用gdb的catch命令来帮助咱们调试异常。线程
使用gdb捕获异常的扔出点(至关于在扔出异常的地方添加断点):debug
catch throw
使用gdb捕获线程退出(至关于在线程退出的时候添加断点):调试
catch pthread_exit
这样,若是相应的事件发生,gdb就会中断程序的执行, 就可使用gdb的bt命令来检查出现错误的调用栈了。code
更多信息:blog
(gdb) help catch Set catchpoints to catch events. Raised signals may be caught: catch signal - all signals catch signal <signame> - a particular signal Raised exceptions may be caught: catch throw - all exceptions, when thrown catch throw <exceptname> - a particular exception, when thrown catch catch - all exceptions, when caught catch catch <exceptname> - a particular exception, when caught Thread or process events may be caught: catch thread_start - any threads, just after creation catch thread_exit - any threads, just before expiration catch thread_join - any threads, just after joins Process events may be caught: catch start - any processes, just after creation catch exit - any processes, just before expiration catch fork - calls to fork() catch vfork - calls to vfork() catch exec - calls to exec() Dynamically-linked library events may be caught: catch load - loads of any library catch load <libname> - loads of a particular library catch unload - unloads of any library catch unload <libname> - unloads of a particular library The act of your program's execution stopping may also be caught: catch stop C++ exceptions may be caught: catch throw - all exceptions, when thrown catch catch - all exceptions, when caught Do "help set follow-fork-mode" for info on debugging your program after a fork or vfork is caught. Do "help breakpoints" for info on other commands dealing with breakpoints.
转自http://blog.chenming.info/blog/2008/04/16/handle-exception-in-gdb/事件