windbg 调试 r3 死循环
来源:互联网 发布:淘宝网中老年秋装外套 编辑:程序博客网 时间:2024/05/17 22:16
这两天调试一程序,发现xp上cpu占用达到100%, win7上占用一直持续达到25%,程序没有挂,我猜想可能是存在死循环了,只好用windbg调调,附加进程断下来以后:
> ~ *kv //查看所以线程栈
重点查看了下各线程模块的调用,仔细检查后竟然没发现什么问题.
> !runaway // !runaway命令查看各个线程的消耗程度。
User Mode Time
Thread Time
5:17c 0 days 0:02:47.373
6:530 0 days 0:00:01.154
4:188 0 days 0:00:01.123
0:72c 0 days 0:00:00.031
7:678 0 days 0:00:00.000
3:738 0 days 0:00:00.000
2:74c 0 days 0:00:00.000
1:700 0 days 0:00:00.000
这个很明显,5:17c明显消耗cpu过多,如果差别不是很明显可以记录一下,让他连续运行断开后的!runaway结果各线程占用cpu的差值也会得到消耗cpu过多的线程我这个很明显就是5:17c线程有问题。
>~5 s //切换到17c线程空间
0:005> kv //查看线程栈
Child-SP RetAddr : Args to Child : Call Site
00000000`012ae238 00000000`7386bff7 : 00000000`01d4e628 00000000`01d4e640 00000000`737e2450 00000000`012aec40 : ntdll!ZwCreateFile+0xa
00000000`012ae240 00000000`7385cf87 : 00000000`01d4e628 00000000`00000000 00000000`00000000 00000000`00000060 : wow64!whNtCreateFile+0x10f
00000000`012ae310 00000000`737e2776 : 00000000`769d72cf 00000000`00000023 00000000`00000246 00000000`01d4dc18 : wow64!Wow64SystemServiceEx+0xd7
00000000`012aebd0 00000000`7385d07e : 00000000`00000000 00000000`737e1920 00000000`00000000 00000000`00000000 : wow64cpu!TurboDispatchJumpAddressEnd+0x2d
00000000`012aec90 00000000`7385c549 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : wow64!RunCpuSimulation+0xa
00000000`012aece0 00000000`77cde707 : 00000000`00000000 00000000`7efdf000 00000000`7ef91000 00000000`00000000 : wow64!Wow64LdrpInitialize+0x429
00000000`012af230 00000000`77c8c32e : 00000000`012af2f0 00000000`00000000 00000000`7efdf000 00000000`00000000 : ntdll! ?? ::FNODOBFM::`string'+0x29364
00000000`012af2a0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!LdrInitializeThunk+0xe
上面的结果竟然看不出什么来~到这儿就很纠结了,不知道怎么下手了,先查看一下17c线程的详细信息
> ~ 5
. 5 Id: 728.17c Suspend: 1 Teb: 7ef91000 Unfrozen
Start: GetInfo!ILT+1410(?ProcMonThreadProcYGKPAXZ) (01354587)
Priority: 15 Priority class: 32 Affinity: f
里面找到这个死循环的起始线程(?ProcMonThreadProcYGKPAXZ) (01354587)然后去找代码代相关代码,发现这个线程的调用代码实在是太多、太杂,一行行排太费时..到这作就有点痛苦了,要是他能像od一样下模块内存访问断点多好,可以直接断在我们模块的程序代码的执行处,或者查看指令执行跟踪也不错,也能定位到死循环位置。
另外不知道为什么挂到线程空间里面竟然没有显示完整的线程栈? 也没有异常发生,要是知道的同学告知下!
后来纠结了一点时间,一直按kv发泄,在想问为什么会这样,突然脑子里面想到,即然是在线程程空间里面了,那就f10单步执行呗,总能执行到我们的模块吧,接着就f10一直单步,确实回到了我们模块,最终定位到死循环。
找到位置就好了,接着就开始修复.....
- windbg 调试 r3 死循环
- windbg双机调试时对R3函数下断
- 反汇编调试死循环
- Windbg调试Unity3d 卡死 无响应等问题测试
- 程序调试技术 - 跳出死循环
- ADS调试程序时进入死循环
- linux下gdb调试多线程死循环
- 程序调试技术 - 跳出死循环
- Linxu 进程死循环问题调试
- Linux内核调试:vmdumper <world-id> nmi,死循环调试
- Windbg调试----Windbg入门
- Windbg调试----Windbg入门
- Windbg调试
- windbg 调试
- windbg 调试
- windbg调试
- windbg 调试
- windbg调试
- css3美化文本框提示特效代码下载
- 常用的工具类
- java线程:线程的同步-同步方法
- 习题8
- hive sql遇到的问题
- windbg 调试 r3 死循环
- Specialized Four-Digit Numbers
- wxpython 窗口内可移动控件
- eclipse 中git解决冲突
- Hadoop2.2.0版本多节点集群安装及测试
- Text Reverse
- 10 service 创建
- CSS3----转换(旋转)transform
- Object 对象