windbg使用技巧
来源:互联网 发布:混乱武林独孤求败软件 编辑:程序博客网 时间:2024/05/17 18:13
dt -v DMS_Server!DataRow 376c4b58+8 转存出数据结构
dt -s 4c -n DMS_Server!* 查找结构体大小
回答本文标题中的问题, 步骤如下:
第一步, 开启日志记录:
.logopen d:\output.txt
第二步, 运行你想要输出到文本文件中的命令:
.logclose
第四步, 检查是否还有日志记录打开:
.logfile
symbol path:
srv*c:/symbol*http://msdl.microsoft.com/download/symbols;
SRV*C:\WINDOWS\symbol*http://msdl.microsoft.com/download/symbols获取ntdll symbol
lm 列出模块的开始结束地址
lm v m ntdll* 查看模块的版本信息
heap -s 列出所有堆的统计信息
heap -a [address] 列出此堆分配的所有内存
dc [address] 转存出内存数据的字符
dt CVFSFileResponse 内存地址+8
dps [address] 查找 一段地址内的 symbol
s -d 00000000 L?ffffffff [address] 查找某个值在内存空间内被谁引用过
dd [address] 打印出地址内的值
map中nil == 1 表示根节点
ln
查找全局变量,类的指针
x *!类名* 如:x *!SSDataCenter*
005da2ec SS!SSDataCenter::`vftable' = <no type information>
005da2ec 就是这个指针
在内存空间中查找类
x *!类名* 如:x *!RecordUnit*
005eaf98 SS!RecordUnit::`vftable' = <no type information>
005eaf98 就是这个指针
s -d 00000000 l?ffffffff 005eaf98
打印出RecordUnit的指针
0ffbfb44 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
10357a7c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
1035fbf4 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103671dc 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
1038164c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103dc81c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103e3244 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103efa1c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103fad0c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
10402b5c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
1040a32c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
10423fcc 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
(RecordUnit*) 0x0ffbfb44-8
程序崩溃前的日志可以通过查看日志指针获取。
dt _heap_entry 003f4388
ntdll!_HEAP_ENTRY
+0x000 Size : 3 当前字节大小*8
+0x002 PreviousSize : 4 前一个大小*8
+0x000 SubSegmentCode : 0x00040003
+0x004 SmallTagIndex : 0x39 '9'
+0x005 Flags : 0x1 状态 0x0空闲 0x1提交
+0x006 UnusedBytes : 0x9
+0x007 SegmentIndex : 0
~.kb 列出所有线程的堆栈
ChildEBPRetAddr Args to Child
0e41e1d4 7c956d2b 7c823eb3 00004350 0e41e384 ntdll!KiFastSystemCallRet
0e41e1d8 7c823eb3 00004350 0e41e384 03064da3 ntdll!ZwClose+0xc
0e41e1e4 03064da3 03064db8 00b01ea8 00000000 kernel32!CloseHandle+0x59
0e41e384 03064de3 00b10000 00b01ea8 0e41e4f8 dbghelp!Win32LiveSystemProvider::OpenMapping+0x2c3
0e41e394 0305f95d 00b10000 d615dfcc 03000000 dbghelp!Win32LiveSystemProvider::CloseMapping+0x13
0e41e4f8 03065d99 00005c10 00b01ea8 0e41e514 dbghelp!GenAllocateModuleObject+0x3cd
0e41e508 800704c7 0e41e990 03062c5a 03062ca3 dbghelp!Win32LiveSystemProvider::FinishProcessEnum+0x19
WARNING: Frame IP not in any known module. Following frames may be wrong.
死锁调试
dt -s 4c -n DMS_Server!* 查找结构体大小
回答本文标题中的问题, 步骤如下:
第一步, 开启日志记录:
.logopen d:\output.txt
第二步, 运行你想要输出到文本文件中的命令:
address
第三步, 关闭日志记录:.logclose
第四步, 检查是否还有日志记录打开:
.logfile
symbol path:
srv*c:/symbol*http://msdl.microsoft.com/download/symbols;
SRV*C:\WINDOWS\symbol*http://msdl.microsoft.com/download/symbols获取ntdll symbol
lm 列出模块的开始结束地址
lm v m ntdll* 查看模块的版本信息
heap -s 列出所有堆的统计信息
heap -a [address] 列出此堆分配的所有内存
dt -s [size] -n [VMS]!* 查找大小为size 的结构体类型 pdb的名称
dc [address] 转存出内存数据的字符
dt CVFSFileResponse 内存地址+8
dps [address] 查找 一段地址内的 symbol
s -d 00000000 L?ffffffff [address] 查找某个值在内存空间内被谁引用过
dd [address] 打印出地址内的值
map中nil == 1 表示根节点
address 打印内存信息(有用)
Largest free region(最大可分配的内存块空间)heap -stat -h 03230000 查看线程 堆占用信息
heap -flt s size 打印所有内存变量(有用)
ln
查找全局变量,类的指针
x *!类名* 如:x *!SSDataCenter*
005da2ec SS!SSDataCenter::`vftable' = <no type information>
005da2ec 就是这个指针
在内存空间中查找类
x *!类名* 如:x *!RecordUnit*
005eaf98 SS!RecordUnit::`vftable' = <no type information>
005eaf98 就是这个指针
s -d 00000000 l?ffffffff 005eaf98
打印出RecordUnit的指针
0ffbfb44 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
10357a7c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
1035fbf4 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103671dc 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
1038164c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103dc81c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103e3244 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103efa1c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
103fad0c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
10402b5c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
1040a32c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
10423fcc 005eaf98 005eafa8 00000001 baadf00d ..^...^.........
(RecordUnit*) 0x0ffbfb44-8
程序崩溃前的日志可以通过查看日志指针获取。
dt _heap_entry 003f4388
ntdll!_HEAP_ENTRY
+0x000 Size : 3 当前字节大小*8
+0x002 PreviousSize : 4 前一个大小*8
+0x000 SubSegmentCode : 0x00040003
+0x004 SmallTagIndex : 0x39 '9'
+0x005 Flags : 0x1 状态 0x0空闲 0x1提交
+0x006 UnusedBytes : 0x9
+0x007 SegmentIndex : 0
~.kb 列出所有线程的堆栈
ChildEBPRetAddr Args to Child
0e41e1d4 7c956d2b 7c823eb3 00004350 0e41e384 ntdll!KiFastSystemCallRet
0e41e1d8 7c823eb3 00004350 0e41e384 03064da3 ntdll!ZwClose+0xc
0e41e1e4 03064da3 03064db8 00b01ea8 00000000 kernel32!CloseHandle+0x59
0e41e384 03064de3 00b10000 00b01ea8 0e41e4f8 dbghelp!Win32LiveSystemProvider::OpenMapping+0x2c3
0e41e394 0305f95d 00b10000 d615dfcc 03000000 dbghelp!Win32LiveSystemProvider::CloseMapping+0x13
0e41e4f8 03065d99 00005c10 00b01ea8 0e41e514 dbghelp!GenAllocateModuleObject+0x3cd
0e41e508 800704c7 0e41e990 03062c5a 03062ca3 dbghelp!Win32LiveSystemProvider::FinishProcessEnum+0x19
WARNING: Frame IP not in any known module. Following frames may be wrong.
死锁调试
syncblk 查看哪些线程拿到了锁
- windbg使用技巧
- windbg使用技巧
- windbg调试技巧 使用脚本文件
- 使用 windbg
- windbg 使用
- windbg使用
- windbg 使用
- windbg使用
- windbg使用
- windbg 使用
- WinDBG使用
- windbg使用
- windbg 使用
- winDbg使用
- windbg使用
- windbg使用
- Windbg使用
- windbg 调试技巧
- 设计模式之建造者模式
- [sicily online]1031. Campus
- GNU风格 ARM汇编语法指南(非常详细)3
- Android学习笔记(八):Activity-OpenMenu和LinearLayout
- 【php】php学习之挖掘细节提升网站性能
- windbg使用技巧
- Sybase修改表字段时,报错“the 'select into 'database option is not enabled ”
- GNU风格 ARM汇编语法指南(非常详细)4
- 用Maven进行项目管理
- CDataExchange::PrepareCtrl(int nIDC)里出错 解决
- 命令行更新linux软件
- ubuntu开启SSH服务
- GNU风格 ARM汇编语法指南(非常详细)5
- Chrome extension的manifest_version升级过程几个棘手问题的解决方法