2、调试思路
2.1指针访问违例等异常类问题
(1)要处理此类问题,请首先熟悉windbg调试器的的用法.
(2)要分析异常问题,找到异常代码,首先要有异常情况下的core dump文件,操作系统处理过程中,有硬件中断,到操作系统的SHE处理,最终到分发给调试器,分析core dump,找到异常线程栈,找到线程栈后,开始从windows的SHE相关接口往上看,找到出错的自己模块和代码.
相关可以分享的调试命令:
~*kn 100 //切换到指点线程.
!analyze –v/ -hang/-crash //调试器直接进行异常分析,找出线程,并展示异常码和异常堆栈
.frame x //在有源代码的情况下,直接查看接口的栈变量,参数和返回值等信息
Kn kb kd.dump .logopen dc //更多的命令请大家学习windbg的帮助文档.
2.2线程死锁等挂死类问题
(1)通过!analyze –hang找出互锁的线程组,切换到其中的一个线程中.
(2)通过windbg的元命令!CS等找到windows核心对象的句柄,找到拥有核心对象的线程. 参考命令
(3)~*kn 切换到拥有锁的线程, 通过kn100 开始分析线程堆栈,找到导致死锁的代码流程.并进行修改.
请参照windbg 用户手册进行操作.
2.1指针访问违例等异常类问题
(1)要处理此类问题,请首先熟悉windbg调试器的的用法.
(2)要分析异常问题,找到异常代码,首先要有异常情况下的core dump文件,操作系统处理过程中,有硬件中断,到操作系统的SHE处理,最终到分发给调试器,分析core dump,找到异常线程栈,找到线程栈后,开始从windows的SHE相关接口往上看,找到出错的自己模块和代码.
相关可以分享的调试命令:
~*kn 100 //切换到指点线程.
!analyze –v/ -hang/-crash //调试器直接进行异常分析,找出线程,并展示异常码和异常堆栈
.frame x //在有源代码的情况下,直接查看接口的栈变量,参数和返回值等信息
Kn kb kd.dump .logopen dc //更多的命令请大家学习windbg的帮助文档.
2.2线程死锁等挂死类问题
(1)通过!analyze –hang找出互锁的线程组,切换到其中的一个线程中.
(2)通过windbg的元命令!CS等找到windows核心对象的句柄,找到拥有核心对象的线程. 参考命令
(3)~*kn 切换到拥有锁的线程, 通过kn100 开始分析线程堆栈,找到导致死锁的代码流程.并进行修改.
请参照windbg 用户手册进行操作.