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

dump分析器winbdg

时间:2023-10-11 20:58:57浏览次数:31  
标签:查看 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。

  

  下面这行命令 如果你发现出现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扩展。

  

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

  

  实战命令: ~ 查看线程

  

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

  lm 查看你加载的模块

  

  kb 查看native code调用栈

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

  

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

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

  

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

  

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

  

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

  

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

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

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

标签:查看,dump,分析器,winbdg,SOS,线程,sos,调试,WinDBG
From: https://www.cnblogs.com/zhengwei-cq/p/17758142.html

相关文章

  • vcs_dump波形相关选项
    VCSdump波形相关选项目录1vcs选项2forcetcl中的选项1vcs选项-debug_access+all#允许dump波形?-debug_region+cell+encrypt#允许dumpcell的波形(stdcell,memorycell等)2forcetcl中的选项fsdbDumpfile"./vcs.fsdb"fsdbDumpvars0TBfsdbDumpon......
  • MYSQL数据备份之mysqldump命令详解
    一、mysqldump简介mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。二、mysqldump命令......
  • mysqldump 导出来的文件,使用 source还原时报错“ASCII '\0' appeared in the stateme
    导出语句:mysqldump-uroot-pword--databasesdb1--tablestable1>./sqldumps/archive-table1-`date+"%Y%m%d_%H%M%S"`.sql导出后,使用source还原报错:ASCII'\0'appearedinthestatement,butthisisnotallowedunlessoption我开始以为是我导出的编码格式有问题,......
  • 数据泵(impdb)导入Oracle分片的数据库dump文件
    数据泵(impdb)导入Oracle数据库一.sqlplus登录目标数据库,创建导入的目录路径#该目录要在导入的数据库本机建立,如果是docker就在容器内部创建createdirectorydata_diras'/home/oracle/prd_imp/prd_dump';data_dir为路径名称,可自命名。路径是导出的dmp文件存放的路径必须......
  • json.dump()的用法
    一、JSON是什么JSON是用于存储和交换数据的语法。JSON(JavaScriptObjectNotation)最初是用JavaScript对象表示法编写的文本,但随后成为了一种常见格式,被包括Python在内的众多语言采用。python里面的语言对象一般只有python能读懂,为了能比较好储存,而且能够让别的编程语言也能......
  • 解决交叉编译产生的程序放到目标板上运行时出现Segmentation fault (core dumped)
    原文:https://blog.csdn.net/qq_36219010/article/details/100163134在PC机上编译一段程序:arm-linux-gnueabihf-gcc-ohellohello.c这里产生hello文件用FTP传输到目标板上(树莓派3B+),运行时出现:报告段错误。后来我又试了不输出指定的文件名:arm-linux-gnueabihf-gcchello.c......
  • 仿Hexdump的代码
    编码过程中我们有时候需要将数据的十六进制值打出来看看,这里做一下记录#include<stdio.h>#include<ctype.h>#include<unistd.h>voidpretty_print(uint8_t*ret,size_tsize){for(size_ti=0;i<size;i++){size_tc=i;printf("%08zx......
  • tcpdump 抓包命令的使用
     ##抓取192.168.6.6的tcpdump -i 网卡  host 192.168.6.6  ##抓取目的端口为22的网络数据tcpdump -i 网卡  dst port 22##抓取udp协议的tcpdump -i网卡 udp 过滤协议 ##抓包存取tcpdump -i eth0 host 192.168.66.6 andport......
  • 使用MAT比较多个heap dump文件
    参考文档:https://www.cnblogs.com/melody-emma/p/4914832.html 1.步骤 2.生成结果 3.对比效果 ......
  • Linux下的网络抓包tcpdump
    tcpdump[-AdDefIJKlLnNOpqRStuUvxX][-Bbuffer_size][-ccount][-Cfile_size][-Grotate_seconds][-Ffile][-iinterface][-jtstamp_type][-mmodule][-Msecret][-Q|-Pin|out|inout][-rfile][-ssnaplen][-Ttype][-wfile......