-
Win10系统下WinDBG怎么分析转储日志和蓝屏日志(2)
- 作者:杨琅臻 分类:win10 发布时间:2021-07-01 11:55:00
全局变量 局部变量 函数名以及他们实体指针的地址 帧指针表 源代码行数 这些都被成为symbp。例如一个简单的符号文件Myprogram.pdb可能包含上百个符号表。...
全局变量
局部变量
函数名以及他们实体指针的地址
帧指针表
源代码行数
这些都被成为symbp。例如一个简单的符号文件Myprogram.pdb可能包含上百个符号表。一般来说,软件公司发布两种版本的symbp file,一种是全量symbp file包含全部pubpc symbps和private symbps,另一种简版的文件只包含pubpc symbps。
调试时,必须知道调试器能够获取与调试目标相匹配的symbp files,在线调试和调试crash dump files都需要symbps。
Windows以后缀名pdb保存symbps,vs将所有symbps保存在pdb文件中。
为Debugging获取符号表
设置好symbps是一项充满挑战的任务,特别对于内核态调试来说。它经常需要你知道你电脑产品的所有名字和releases,调试器必须能够定位到每一个产品的symbp file。
为了简化困难,symbps files被收集到一个symbp store,可以通过symbp server获取。一个symbp store 是一个symbps files的集合,是一个索引,是一个管理员添加和删除文件的工具。这些文件通过一些独特的参数被索引,例如时间戳或图像大小。Debugging Tops for Windows contains a symbp store creation top called SymStore. Debugging Tops for Windows contains a symbp server called SymSrv.
配置符号表
微软官网上说的比较委婉,不容易操作。这里直接给出一种简单的设置方法。
将windbg安装目录添加到Path环境变量中。如:C:Program FilesDebugging Tops for Windows (x64)
新建一个环境变量_NT_SYMBOL_PATH 值为: SRV*c:mysymbp* http://msdl.microsoft.com/download/symbps
这句话告诉WinDbg,我的symbp文件保存在c:mysymbp文件夹里,其实里面什么都没有,甚至这个文件夹不存在,不过没关系,系统找不到的话会创建一个,并在上面的网址中去帮你下载符号文件放在里面。
重启计算机
重启计算机后会如果发现C盘多一个mysymbp文件,并且用windbg打开一个exe文件,会看到Symbp search path is: SRV*c:mysymbp* http://msdl.microsoft.com/download/symbps提示信息,说明配置成功。
注意:进行完此步骤后,如果再次启动VS,VS会读取_NT_SYMBOL_PATH环境变量并且从中下载并读取symbp,这会造成VS启动调试非常缓慢,建议不用Windbg时可以将_NT_SYMBOL_PATH换个名字。
Debugger如何识别符号表
调试中的符号问题
用户态调试入门
调试自己的程序
假设你已经编写如下程序
void MyFunction(long p1, long p2, long p3){ long x = p1 + p2 + p3; long y = 0; y = x / p2;}void main(){ long a = 2; long b = 0; MyFunction(a, b, 5);}
(1)用Visual studio 2015在x64、debug模式下生成一个Helloworld.exe,同时生成一个Helloworld.pdb。
(2)将Helloworld.pdb拷贝到设置的本地symbp文件夹中(参考:配置符号表)。
(3)用windbg打开Helloworld.exe和Helloworld.cpp。
接着就可以输入调试命令进行输入了,例如:
bu HelloWorld!main
意思是在HelloWorld的main模块处设置断点
g
开始运行程序
按F11进行单步调试,直到程序运行到y = x / p2将会崩溃,输出错误信息,类似这样:
(3058.3830): Integer divide-by-zero - code c0000094 (first chance)
First chance exceptions are reported before any exception handpng.
This exception may be expected and handled.
HelloWorld!MyFunction+0x53:
00000001`3f2a16d3 f7bd28010000 idiv eax,dword ptr [rbp+128h] ss:00000000`0014f648=00000000
是说发生了0除错误。
(4)!analyze -v
将会生成一堆对错误的分析。
调试notepad++
此部分的先决条件是配置好symbp(参考: 配置符号表)。
用windbg打开notepad.exe,通常在C:WindowsSystem32,如图:
猜您喜欢
- Win10谷歌浏览器无法自动更新?看这里..2024-05-03
- Win10轻松解压7z文件:新手入门技巧..2024-05-03
- Win10电脑突然失语?无法打字的原因及..2024-05-03
- 解锁屏幕,轻松截取Win10系统美妙瞬间..2024-05-03
- Win10开始菜单打不开?这五大原因让你..2024-05-03
- Win10启动卡死?揭秘简单实用的解决方..2024-05-03
相关推荐
- win10系统如何安装百度影音视频客户端..2023-01-25
- Win10蓝牙鼠标频繁断连卡顿怎么回事..2022-07-11
- 老司机帮您win10系统硬盘容量怎么看?..2017-09-19
- win10系统调节Realtek声卡音效的方法..2021-07-22
- window10怎样设置锁屏密码 window10在哪设..2023-10-06
- win10自动更新功能怎么关闭?win10自动..2020-12-07