当前位置:网站首页>使用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文件,然后就看到了更详细的函数调用堆栈:
又来详细的函数调用堆栈,可能就能更快地分析出问题了。
边栏推荐
- 技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
- 数据中台建设(十):数据安全管理
- Header file search rules when compiling with GCC
- Oracle 19.3 restart 环境
- 教你本地编译运行一个IDEA插件,在IDEA里聊天、下棋、斗地主!
- 012_SSS_ Improving Diffusion Model Efficiency Through Patching
- static linking and dynamic linking
- How does the official account operate and maintain?Public account operation and maintenance professional team
- MySQL data view
- js hijacks the array push method
猜你喜欢
这份阿里强推的并发编程知识点笔记,将是你拿大厂offer的突破口
数据可视化(一)
【综合类型第 35 篇】程序员的七夕浪漫时刻
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
FPGA: Use of the development environment Vivado
基于MindSpore高效完成图像分割,实现Dice!
The host computer develops C# language: simulates the STC serial port assistant to receive the data sent by the microcontroller
Our Web3 Entrepreneurship Project, Yellow
Leetcode刷题——623. 在二叉树中增加一行
Opencv算术操作
随机推荐
拓朴排序例题
[Strong Net Cup 2022] WP-UM
【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
L2-042 老板的作息表
60行从零开始自己动手写FutureTask是什么体验?
poj2287 Tian Ji -- The Horse Racing(2016xynu暑期集训检测 -----C题)
MySQL事务
SQL Outer Join Intersection, Union, Difference Query
PCB layout must know: teach you to correctly lay out the circuit board of the op amp
2022 Huashu Cup Mathematical Modeling Ideas Analysis and Exchange
如何测试一下现场的备机失败,转发主机的场景?
A small test of basic grammar, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, basic grammar of go lang and the use of variables EP02
The query that the user's test score is greater than the average score of a single subject
【温度预警程序de开发】事件驱动模型实例运用
Opencv算术操作
【MindSpore Easy-Diantong Robot-01】You may have seen many knowledge quiz robots, but this one is a bit different
012年通过修补_sss_提高扩散模型效率
SMB + SMB2: Accessing shares return an error after prolonged idle period
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」