[转]使用gdb调试异常

有时程序中有未捕获的异常会导致程序异常的行为甚至导致程序的直接退出。 这对服务器程序来说是不可接受的。

可以使用gdb的catch命令来帮助我们调试异常。

使用gdb捕获异常的扔出点(相当于在扔出异常的地方添加断点):

catch throw
使用gdb捕获线程退出(相当于在线程退出的时候添加断点):

catch pthread_exit
这样,如果相应的事件发生,gdb就会中断程序的执行, 就可以使用gdb的bt命令来检查出现错误的调用栈了。

更多信息:

(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/

posted @ 2017-07-19 17:51  catmelo  阅读(2968)  评论(0编辑  收藏  举报