当前位置:网站首页>使用Windbg过程中两个使用细节分享
使用Windbg过程中两个使用细节分享
2022-08-05 10:37:00 【dvlinker】
我们在使用工具的过程中,一般都会遇到一些使用上的细节或者技巧,今天就来给大家分享一下最近使用Windbg过程中遇到的两个问题,以供参考。

1、Windbg6.0版本好像无法到微软在线pdb服务器上下载pdb文件,而Windbg10.0是可以的
在某次将Windbg动态附加到目标进程上调试时捕获到了异常,输入kn命令查看函数调用堆栈,中间看到了我们的业务模块,再往上看,看到了系统模块devenum.dll和ntdll.dll模块:

有时为了方便确定问题,我们需要查看这些系统模块调用的具体是哪些接口。
从函数调用堆栈中地址偏移来看,比如devenum!DllRegisterServer+0x437a,首先这个函数DllRegisterServer和当前的函数调用堆栈时不搭噶的,再者当前相对于DllRegisterServer函数接口的偏移地址0x437a太大,一般一个函数内部实现不会如此之长,所以肯定是没有加载pdb,没有函数符号,所以这个地址是相对DllRegisterServer导出函数的偏移。对于dll库,其导出函数的符号,对于外界是可见的。
同事使用的Windbg6.0的绿色版本,附加到进程上动态调试的,捕获到了异常,中断了下来。但是在Windbg6.0中设置了微软在线pdb下载地址,但是Windbg6.0中好像没法从在线的pdb服务器上下载。即使使用.reload /f devenum.dll命令去强制加载库的pdb文件,也是不行的。
难道WIndbg6.0无法从微软pdb服务器上下载pdb文件,新版本的WIndbg10.0应该是可以的。
这是动态调试,难道要用windbg10.0重新附加到进程上调试运行,重新复现一下现象?
其实,是不用这么做的,可以在当前使用的Windbg6.0中直接使用命令:
.dump /ma D:\0805.dmp导出dump文件,然后再用Windbg10.0打开保存的dump文件,然后将包含在线pdb地址的pdb路径:
C:\Users\Administrator\Desktop\pdbdir;srv*f:\mss0616*http://msdl.microsoft.com/download/symbols
这么个一长串组合路径主要由下面三个路径构成:(路径之间使用分号隔开)
1)应用程序库pdb文件路径(非系统库):
C:\Users\Administrator\Desktop\pdbdir。我们开发的模块的pdb文件集中拷贝到该路径中,路径名称可以随意选择。
2)本地安装的Windows系统库pdb文件路径:
f:\mss0616,可以到微软官网上下载和Windows系统一致的系统符号库安装包,这个路径就是本机上安装系统pdb的路径。此时安装的系统pdb库是与我们当前系统对应的pdb,但在分析崩溃时dump文件是在在其他机器上产生的,对应模块的pdb是其他机器上安装系统的pdb,那我们本地安装的pdb就用不上了。现在微软官方已经取消了系统pdb文件的下载,统一使用下面给出的微软提供的在线系统pdb服务器地址。
3)Windows系统库在线下载路径:
http://msdl.microsoft.com/download/symbols,这是微软提供的在线系统pdb文件下载服务器,如果设置了该地址,Windbg会自动连接该服务器,去自动下载与当前dump文件中用到的系统库版本一致的pdb文件。但这里需要注意一下,有时微软这个服务器会有连接不上或卡顿的情况,会直接导致windbg卡顿。所以遇到windbg比较安顿的时候,可以先将该地址删除掉。但有时我们需要设置该在线地址,因为有时我们想去看到底是调用了系统库中的那个接口出发的崩溃。
设置到Windbg中,Windbg10.0中是可以在线下载系统的pdb文件的,然后再查看堆栈就能看到调用系统库的接口了,如下所示:

2、没加载pdb时查看到的函数调用堆栈较少,加载pdb文件后可能能看到的更多的函数调用堆栈
有时发生异常时,去查看函数的调用堆栈,从调用堆栈中只能看到有限的函数调用,比如只能看到系统库的函数调用,堆栈中看不到具体的业务模块的函数;或者是只能看到很少几行的函数调用。比如:

当前这个异常是Access violation内存访问违例的异常,函数调用堆栈中只有一行记录。
一般遇到这种情况,可能是因为没有加载pdb库导致的,当前显示的函数调用堆栈中可能是系统库,也有可能是我们的业务库。对于业务库,我们直接使用lm vm命令去查看器其时间戳,然后到到文件服务器对应的目录中去找对应时间点的pdb文件。
一般在正式的项目中,通过自动化软件编译系统,每天都会自动编译软件版本,并将软件的安装包及相关模块的pdb文件保存到文件服务器中,如下所示:
这样我们就可以根据模块的编译时间找到对应版本的pdb文件了。
如果函数调用堆栈中显示的模块是系统库,可以设置微软在线pdb服务器下载地址:
C:\Users\Administrator\Desktop\pdbdir;srv*f:\mss0616*http://msdl.microsoft.com/download/symbols
让Windbg到微软官方服务器上去下载,等加载pdb文件后可能能看到更多的函数调用堆栈。类似的情况我们在日常排查问题时多次遇到过。当加载pdb符号库文件后,调用堆栈中就看到更多的函数的调用了。
对于本节的示例,函数调用堆栈中的模块是业务库模块,直接根据时间戳到文件服务器上找到对应的pdb文件,然后就看到了更详细的函数调用堆栈:

又来详细的函数调用堆栈,可能就能更快地分析出问题了。
边栏推荐
- Leetcode刷题——623. 在二叉树中增加一行
- FPGA: Basic Getting Started Button Controlling LED Lights
- 产品太多了,如何实现一次登录多产品互通?
- 【翻译】混沌网+SkyWalking:为混沌工程提供更好的可观察性
- 解决【命令行/终端】颜色输出问题
- 告白数字化转型时代:麦聪软件以最简单的方式让企业把数据用起来
- SMB + SMB2: Accessing shares return an error after prolonged idle period
- GPU-CUDA-图形渲染分析
- [强网杯2022]WP-UM
- R语言ggplot2可视化:可视化密度图(Density plot)、可视化多个分组的密度图、数据点分布在箱图中间、添加主标题、副标题、题注信息
猜你喜欢

three objects are arranged in a spherical shape around the circumference

STM32+ULN2003 drives 28BYJ4 stepper motor (forward and reverse according to the number of turns)

百年北欧奢华家电品牌ASKO智能三温区酒柜臻献七夕,共品珍馐爱意

012年通过修补_sss_提高扩散模型效率

上位机开发C#语言:模拟STC串口助手接收单片机发送数据

Still looking for a network backup resources?Hurry up to collect the following network backup resource search artifact it is worth collecting!

数据可视化(一)

登录功能和退出功能(瑞吉外卖)

Ali's new launch: Microservices Assault Manual, all operations are written out in PDF

The JVM collection that Alibaba's top architects have summarized for many years, where can't I check it!
随机推荐
SQL外连接之交集、并集、差集查询
SMB + SMB2: Accessing shares return an error after prolonged idle period
FPGA:基础入门按键控制LED灯
How to choose coins and determine the corresponding strategy research
导火索:OAuth 2.0四种授权登录方式必读
Chapter 5: Multithreaded Communication—wait and notify
反射修改jsessionid实现Session共享
[Android] How to use RecycleView in Kotlin project
19.3 restart the Oracle environment
Opencv算术操作
High-quality DeFi application building guide to help developers enjoy DeFi Summer
技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手)
gradle尚硅谷笔记
2022杭电多校 第6场 1008.Shinobu Loves Segment Tree 规律题
Our Web3 Entrepreneurship Project, Yellow
数据中台建设(十):数据安全管理
Introduction to SD NAND Flash!
three.js debugging tool dat.gui use
js hijacks the array push method
