首页 > 其他分享 >dump分析器winbdg

dump分析器winbdg

时间:2023-11-16 12:33:53浏览次数:32  
标签:查看 dump 分析器 winbdg SOS 线程 sos 调试 WinDBG

工具: winbdg

  WinDBG不是专门用于调试.Net程序的工具,它更偏向于底层,可用于内核和驱动调试。进行普通的.Net程序调试还是使用微软专为.Net开发的调试工具MDBG更方便一些。但是WinDBG能看到更多的底层信息,对于某些特别疑难的问题调试有所帮助,例如内存泄漏等问题。

  工具下载: WinBdgTool.zip

  测试代码下载 : MyDumpTest.7z

  首先添加设定符号文件路径(Symbol Path),当你使用Visual Studio编译程序时,是否有留意到在bin/Debug文件夹下会有.pdb后缀的文件?这些文件包含有dll程序集的调试符号,pdb文件并不包含有执行代码,只是使调试工具能把代码执行指令翻译为正确的可识别字符。微软提供了包含大量pdb文件的公共服务器,地址如下:http://msdl.microsoft.com/download/symbols。打开windbg程序,选择“File->Symbol File Path…“,把下面的内容复制进去保存。srv*c:\temp*http://msdl.microsoft.com/download/symbols。

  

dump分析器winbdg_测试程序

  下面这行命令 如果你发现出现Unable to verify checksum...或者的消息 那是因为你没有添加.net的sos扩展或者sos的版本没有对应上。.Net1.1时代的SOS扩展已经自带于下载安装的WinDBG中,从.Net2.0以后,SOS扩展已经自带到.Net框架中:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SOS.dll,为了不至于引起混淆,最好的方法就是使用前面的loadby调试器元命令来让WinDBG自己决定加载什么版本的SOS。

  添加sos:.load C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\sos.dll。

  加载SOS后,使用命令.chain来查看调试链中是否已经成功包含SOS扩展。

  

dump分析器winbdg_测试程序_02

  通过!eeversion查看sos的版本号。

  

dump分析器winbdg_测试程序_03

  实战命令: ~ 查看线程

  

dump分析器winbdg_加载_04

  这表明当前dump里记录的线程数。如果要切换线程,用波浪线+序号+s来切换,如切换到线程2,那么用~2s即可。

  lm 查看你加载的模块

  

dump分析器winbdg_调试工具_05

  kb 查看native code调用栈

  用~现在只有线程信息,对于每个线程,在被抓的那一刻,在执行什么,我们有命令:kb。

  

dump分析器winbdg_调试工具_06

  看到clr大家应该很眼熟吧。这里已经可以看到较详细的调试信息了。

  !runaway    (查看线程对应 CPU 运行时间)

  

dump分析器winbdg_调试工具_07

  因为我们的测试程序是测试的是线程阻塞所以我们选一个运行时间为0的,例如415

  

dump分析器winbdg_测试程序_08

  !dso 查看这个堆栈中的对象

  

dump分析器winbdg_加载_09

  !clrstack 查看这个线程的托管代码调用栈

  

dump分析器winbdg_测试程序_10

  通过上面我们已经可以看出这个线程一直都是处于阻塞状态。

  到这里基本上一个小的测试程序可以告一段落了,当然windbg的功能远远不止如此,这里分享一些资源给大家。

  资源下载 : WinDbg入门.rar  Windbg用法详解.7z



标签:查看,dump,分析器,winbdg,SOS,线程,sos,调试,WinDBG
From: https://blog.51cto.com/u_14316983/8416434

相关文章

  • Webpack Bundle Analyzer包分析器
    当我们需要分析打包文件dist里哪些资源可以进一步优化时,就可以使用包分析器插件webpack-bundle-analyzer。NPM上的介绍是使用交互式可缩放树图可视化webpack输出文件的大小。我的是vue2项目。1、webpack-bundle-analyzer插件的安装$npminstall--save-devwebpack-bundle-analy......
  • 在`tomlkit`库中,`doc.as_string()`和`tomlkit.dumps(doc)`都可以将TOML文档转换为字符
    `tomlkit`模块中的`doc.as_string()`和`tomlkit.dumps(doc)`都是用于将TOML文档转换为字符串的方法。然而,他们之间的主要区别在于他们的使用场景和处理方式。-`doc.as_string()`是`TOMLDocument`类的一个方法,它将`TOMLDocument`对象转换为字符串³。这个方法主要用于在已经有一个......
  • 怎么在window上自动获取crash dump
     保存如下内容到opendump.bat,已管理员权限打开文件@echooffecho正在启用Dump...regadd"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\WindowsErrorReporting\LocalDumps"regadd"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\WindowsErrorReporting\Loc......
  • 解决:tcpdump -w xxxxx.cap 提示 Permission denied
    出现的如题所示问题。经过多次调试查找资料,找到了一种好用的方法。解决方案1:我们只需进入/tmp所在的目录下,然后执行tcpdump命令即可解决。例如:解决方案2:将文件写入指定目录下,正常是可以利用参数-w将采集的文件写入指定的文件目录下,但是往往会出现如上图所示的错误。这时......
  • tcpdump必知必会
    tcpdump原理&在tcp协议栈的位置tcpdump用法基于协议、主机、端口过滤使用andor逻辑运算符做复杂的过滤操作tcpdumpflags1.tcpdump原理linux中非常有用的网络工具,运行在用户态。数据包到达网卡,经过数据包过滤器bpf筛选后,拷贝至用户态的tcpdump程序。tcpdump抓包......
  • linux print_hex_dump()
    linuxprint_hex_dump()linux/lib/hexdump.c/***print_hex_dump-printatexthexdumptosyslogforabinaryblobofdata*@level:kernelloglevel(e.g.KERN_DEBUG)*@prefix_str:stringtoprefixeachlinewith;*callersuppliestrailingspac......
  • 配置rhel系统kdump安装RHEL的debuginfo软件包
    7.1.1.关于kdumpKdump是一种内核碰撞倾销机制,可将系统内存的内容保存以供以后分析。它依赖于kexec,它可以用来从另一个内核的上下文中启动Linux内核,绕过BIOS,并保留第一个内核内存的内容,否则会丢失。在系统崩溃的情况下,kdump使用kexec启动到第二个内核(捕获内核)。第二......
  • mongo备份篇 mongoexport、mongoimport 以及mongodump、mongorestore
    系列导航一、linux单机版mongo安装(带密码验证)二、mongo集群搭建三、java连接mongo数据库四、java对mongo数据库增删改查操作五、mongo备份篇mongoexport、mongoimport以及mongodump、mongorestore如下是总结mongo数据库在执行备份和恢复中一些常用的语句。备份方面比较:1......
  • c++ 程序打印 core dump 信息
    linux环境下c++程序打印coredump信息linux信号机制c++打印堆栈信息#include<signal.h>#include<execinfo.h>#include<dlfcn.h>#include<cxxabi.h>#include<QFile>#include<QTextStream>//捕获信号,对于这些信号都执行coreDumpHandlesignal(SIG......
  • tcpdump抓包实例-syslog和ping
    在实际运维过程中经常遇到网络问题,比如发出去的包是否对端收到了,以下通过syslog和ping的两个例子看看tcpdump抓包过程。实例1:syslog测试主机A(本例中129.73)通过syslog发送信息:“123456”,给主机B日志服务器(本例中120.90,需要配置syslog服务514端口的tcp和udp打开),在日志服务器主机B上抓......