赞
踩
1.使用WinDbg直接启动notepad.exe
2.启动自己的应用程序并附加WinDbg
3.命令摘要
汉化的exe为:ha_windbg.exe
选择:C:\Windows\System32\notepad.exe
启动后见上图。
ModLoad: 说明了加载的模块DLL
菜单:“文件”->“符号文件路径”->浏览,即可添加搜索路径PDB所在路径
e.g: srv*;c:\windows\system32;
另:不需要指定cpp路径,PDB文件直接记录了cpp文件
命令: .sympath
下面显示了当前的PDB路径
0:000 >.sympath
************* Path validation summary **************
Response Time (ms) Location
Deferred srv*
OK c:\windows\system32
0:000 >.reload
//此处应该显示各模块
0:000 >x notepad!*
//此处会显示在notepad中的所有符号
//数量特别多-很慢
0:000 >x notepad!wWin*
//显示适配函数
// 函数地址 函数=命名空间::函数名()
// 函数地址 类函数: 命名空间::类::函数名()
00007ff6`6e76b0a0 notepad!wWinMain (wWinMain)
00007ff6`6e783db0 notepad!wWinMainCRTStartup (wWinMainCRTStartup)
0:000 >bu notepad!wWinMain
//如果有重名的 可以使用函数地址
// bu notepad!06cb22ea
//这里的函数地址可以从 x命令里面看
0:000 >bl
//列出断点位置
g == F5
0:000 >g
0:000 >lm
start end module name
00007ff6`6e760000 00007ff6`6e798000 notepad (pdb symbols) C:\ProgramData\Dbg\sym\notepad.pdb\BC04D9A431EDE299D4625AD6201C8A4A1\notepad.pdb
00007ff8`066a0000 00007ff8`067ab000 gdi32full (deferred)
00007ff8`067b0000 00007ff8`068b0000 ucrtbase (deferred)
00007ff8`06a10000 00007ff8`06aad000 msvcp_win (deferred)
00007ff8`06ab0000 00007ff8`06ad2000 win32u (deferred)
00007ff8`06b40000 00007ff8`06e08000 KERNELBASE (deferred)
00007ff8`07220000 00007ff8`072dd000 KERNEL32 (deferred)
0:000 >lm m note*
start end module name
00007ff6`6e760000 00007ff6`6e798000 notepad (pdb symbols) C:\ProgramData\Dbg\sym\notepad.pdb\BC04D9A431EDE299D4625AD6201C8A4A1\notepad.pdb
注意:可以加载pdb文件的路径也已经列出
k的使用场景
Column 1 | Column 2 | Column 2 | Column 2 |
---|---|---|---|
lm | 列出模块 | notepad 的名字 “notepad” | |
x | 查出函数名 | x notepad!run_cmd* | |
bu | 加断点 | bu notepad!run_cmd | 也可以用函数地址 |
bl | 列出所有断点 | bl |
0:000 >k
00 000000c8`2647f708 00007ff6`6e783d36 notepad!wWinMain
01 000000c8`2647f710 00007ff8`07237034 notepad!__scrt_common_main_seh+0x106
02 000000c8`2647f750 00007ff8`08e02651 KERNEL32!BaseThreadInitThunk+0x14
03 000000c8`2647f780 00000000`00000000 ntdll!RtlUserThreadStart+0x21
从上到下 = 函数调用从近到远
0:011 >k
//处理器:线程>k
//0处理器
//011线程
0:000>~
0 Id: 5500.34d8 Suspend: 1 Teb: 000000c8`262c4000 Unfrozen
1 Id: 5500.3960 Suspend: 1 Teb: 000000c8`262c6000 Unfrozen
2 Id: 5500.5d68 Suspend: 1 Teb: 000000c8`262c8000 Unfrozen
0:000>~2s
0:002>k
解析:
0:000 在0处理器 0线程
- 命令列出所有线程,共计3个
~2s切换到线程2 注意命令行变为0:002
输入k 得到调用堆栈
0:000>qd
使用菜单:文件->符号文件路径
搜索时使用 lm m sp*
序号 | 条件 | 操作 |
---|---|---|
1 | 知道准确函数名时 | x 模块名!函数名 |
2 | 搜索函数名 | x 模块名!符号* x SpasTrussEx!NsBDJ::CBdjColumnListDock::CMD_Change* 带命名空间,带类名,带函数名 |
也可以使用地址 bu 模块!地址
序号 | 操作 |
---|---|
1. | bu SpasTrussEx!NsBDJ::CBdjColumnListDock::CMD_Change 注意不带void参数 |
bl
0:007>
0 e 50991900 0001(0001) 0: *** SpasTrussEx!NsBDJ::CBdjColumnListDock::CMD_Change
菜单:调试-停止调试
命令 | 功能 |
---|---|
.sympath | (设置符号路径) |
.reload | (重新加载模块) |
x | (检查符号) |
g | (转到) |
lm | (列出已加载的模块) |
k | 显示堆栈回溯) |
bu | (设置断点) |
bl | 断点列表 |
~ | 断点列表 |
~ns | 设置当前线程 |
!analyze -v | 分析问题 |
qd | 退出和分离 |
调试菜单:
继续
退出
暂停等调试命令
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。