9.windbg-!sym、.reload
来源:互联网 发布:淘宝模版在线制作 编辑:程序博客网 时间:2024/05/29 15:51
!sym
!sym 扩展控制显示详细的符号加载和符号提示。
0:001> !sym!sym <noisy/quiet - prompts/prompts off> - quiet mode - symbol prompts on
0:001> !sym noisy ///< 激活详细符号加载noisy mode - symbol prompts on0:001> !sym quiet ///< 禁止详细符号加载quiet mode - symbol prompts on
0:001> !sym prompts ///< 当SymSrv接收到认证请求时,允许弹出对话框quiet mode - symbol prompts on0:001> !sym prompts off ///< <span style="font-family: Arial, Helvetica, sans-serif;">当SymSrv接收到认证请求时,禁止弹出对话框</span>quiet mode - symbol prompts off
都那么聪明,一个是noisy-quiet,一个是prompts off-prompt on,掌握了
.reload
.reload 命令删除指定模块的所有符号信息,并且按需要重新加载这些符号。某些情况下,该命令也会重新加载或卸载模块本身。
0:001> .reload /d ntdll.dll///< d 重新加载调试器模块列表中的所有模块Reloading current modules................................DBGHELP: C:\WINDOWS\symbols\ntdll.pdb - file not foundDBGHELP: ntdll - public symbols C:\WINDOWS\symbols\dll\ntdll.pdb
好吧,我们发现没有立即显示加载符号
0:001> lm m gdi32 ///< deferred状态start end module name77200000 77290000 GDI32 (deferred) 0:001> .reload /f gdi32.dll ///<f 强制调试器立即加载符号,注意是gdi32.dll不是gdi32SYMSRV: c:\mysymbol\wgdi32.pdb\6E2E9DA4A20241F7B6BB0F1B89FD7A522\wgdi32.pdb not foundSYMSRV: wgdi32.pdb from http://msdl.microsoft.com/download/symbols: 216845 bytes - copied DBGHELP: c:\mysymbol\wgdi32.pdb\6E2E9DA4A20241F7B6BB0F1B89FD7A522\wgdi32.pdb already cachedDBGHELP: GDI32 - public symbols c:\mysymbol\wgdi32.pdb\6E2E9DA4A20241F7B6BB0F1B89FD7A522\wgdi32.pdb0:001> lm m gdi32 ///<加载成功start end module name77200000 77290000 GDI32 (pdb symbols) c:\mysymbol\wgdi32.pdb\6E2E9DA4A20241F7B6BB0F1B89FD7A522\wgdi32.pdb
我们发现,第一次lm查询时GDI32(deferred),调用.reload /f加载后,再次lm,我们可以看到GDI32 (pdb symbols),OK,那我们也猜到了,如.reload /f不带模块,那么是不是会重新加载所有的symbols:
0:001> .reload /fReloading current modules.DBGHELP: C:\WINDOWS\symbols\calc.pdb - file not foundDBGHELP: calc - public symbols C:\WINDOWS\symbols\exe\calc.pdb.DBGHELP: C:\WINDOWS\symbols\safemon.pdb - file not foundDBGHELP: C:\WINDOWS\symbols\dll\safemon.pdb - file not foundDBGHELP: C:\WINDOWS\symbols\symbols\dll\safemon.pdb - file not foundSYMSRV: C:\MyLocalSymbols\safemon.pdb\84C1B55127174ACAA421A85A983FA63B1\safemon.pdb not foundSYMSRV: http://msdl.microsoft.com/download/symbols/safemon.pdb/84C1B55127174ACAA421A85A983FA63B1/safemon.pdb not foundDBGHELP: C:\Program Files\360\360Safe\safemon\safemon.pdb - file not foundDBGHELP: E:\repos\safemon_8_1_1\Release\safemon.pdb - file not found*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files\360\360Safe\safemon\safemon.dll - DBGHELP: safemon - export symbols.DBGHELP: C:\WINDOWS\symbols\AcGenral.pdb - file not foundDBGHELP: AcGenral - public symbols C:\WINDOWS\symbols\DLL\AcGenral.pdbDBGHELP: comctl32 - public symbols C:\MyLocalSymbols\MicrosoftWindowsCommon-Controls-6.0.2600.6028-comctl32.pdb\E882C2C890724D598449E20A4FE6F07C1\MicrosoftWindowsCommon-Controls-6.0.2600.6028-comctl32.pdb.............................................0:001> lmstart end module name01000000 0101f000 calc (pdb symbols) C:\WINDOWS\symbols\exe\calc.pdb10000000 100b0000 safemon (export symbols) C:\Program Files\360\360Safe\safemon\safemon.dll..................................77fc0000 77fd1000 Secur32 (pdb symbols) C:\MyLocalSymbols\secur32.pdb\7867B3F28B5C41CE847895E3FC013DC52\secur32.pdb7c800000 7c91e000 kernel32 (pdb symbols) C:\MyLocalSymbols\kernel32.pdb\072FF0EB54D24DFAAE9D13885486EE092\kernel32.pdb7c920000 7c9b3000 ntdll (pdb symbols) C:\WINDOWS\symbols\dll\ntdll.pdb7d590000 7dd84000 SHELL32 (pdb symbols) C:\MyLocalSymbols\shell32.pdb\DF59C75CA10B4BF89B447BB924C4292C2\shell32.pdb
果然如此!
由于符号服务器对每个版本的二进制文件的符号使用不同的名字,除非确认下游存储被破坏了,否则不需要使用该选项。
reload /u 命令进行更广泛的搜索。调试器首先尝试使用Module 匹配精确的模块名,不管路径是什么。如果找不到匹配项,Module 被当作已加载的映像名。例如,如果HAL在内存中的名字为halacpi.dll,下面两个命令都可以卸载它的符号。
<nobr>kd> .reload /u halacpi.dllkd> .reload /u hal</nobr>
<nobr>0:000> lm m dmmainstart end module name0f5f0000 0f6ac000 DmMain (export symbols) I:\GameDL\Tools\PPSeedTool\build\Debug\DmMain.dll0:000> .reload /u DmMainUnloaded DmMain0:000> lm m dmmainstart end module name0:000> .reload /s /f DmMain.dll*** ERROR: Symbol file could not be found. Defaulted to export symbols for I:\GameDL\Tools\PPSeedTool\build\Debug\DmMain.dll - DBGHELP: DmMain - export symbols0:000> lm m dmmainstart end module name0f5f0000 0f6ac000 DmMain (export symbols) I:\GameDL\Tools\PPSeedTool\build\Debug\DmMain.dll</nobr>
如果一个dll被内嵌于exe中,默认只会加载exe的pdb,.reload提供了强制加载的方式
1..sympath+ 增加pdb路径文件夹
2..reload /i 模块名=基地址,大小 /i忽略.pdb文件版本不匹配的情况。(如果没有包含该参数,调试器不会加载不匹配的符号文件
实例如下:
0:001> lmstart end module name00400000 00ad0000 test011 (deferred) 02810000 02b7a000 SOGOUWB (deferred)
其实在ad0000后附带了个内嵌的maincode_org.dll
设置pdb路径操作:如果下述方式不行,就加到file->symbol file path中,记得不要有中文路径
0:001> .symfix+ E:\项目SVN加载
0:001> .reload /i maincode_org=00AD0000,0024E000*** WARNING: Unable to verify timestamp for maincode_org
0:001> x maincode_org!*00ceb628 maincode_org!g_timeGetTime = 0x0000000000cf8814 maincode_org!g_szMessage = 0x00000000 ""00cfb504 maincode_org!g_pSetWindowPos = 0x0000000此方式也可强制加载其他的pdb,比如有时你需要用到某个pdb的某个结构体时
- 9.windbg-!sym、.reload
- windbg的reload命令
- sym
- Windbg 使用时Symbol缺失 之 .reload命令
- Reload
- reload
- crash sym command
- kbuild-DEFINE(sym, val)
- 实时 Java 社区论坛:Sym
- Sym安装指南
- WinDBG
- windbg
- WINDBG
- windbg
- WinDBG
- WinDbg
- WinDbg
- Windbg
- 代码质量之三-----关键的代码需要单元测试和自己review及交叉review
- iOS 书翻页效果
- Oracle的一些命令
- 64位与32位对无符号类型处理的区别
- 对数据库中的数据进行分页处理的实现
- 9.windbg-!sym、.reload
- JSP于JS的交互
- ios图书翻页效果
- c++画图(2)-初步试验调用python
- Android GridView嵌入ImageButton的问题
- Android ListView 列表控件的简单使用
- 利用c#制作托盘程序,并禁止多个应用实例运行
- 2012年5月TIOBE编程语言排行榜发布:C继续领跑
- 同一个tomcat多个web应用共享session