WinDbg安装入坑3(C#)

news2024/11/17 14:43:02

由于作者水平有限,如有写得不对的地方,请指正。

使用WinDbg的过程中,坑特别的多,对版本要求比较严格,如:

1   32位应用程序导出的Dump文件要用32位的WinDbg打开,想要没有那么多的问题,还得要求用32位的任务管理器导出Dump文件,32位的任务管理器的路径如下:C:\Windows\SysWOW64\taskmgr.exe

2   64位应用程序导出的Dump文件要用64位的WinDbg打开

3  没指定位数的程序(如AnyCPU)导出的文件要用64位的WinDbg打开
 

本文目的:

使用C#编写一段程序,并用64位的任务管理器导出为32位的Dump文件,试一下WinDbg Preview和老版的WinDbg在使用过程中的坑

本文测试环境:

.net framework 3.5 

vistual studio 2017

win10 64位操作系统

步骤如下:

1   新增C# .net framework 控制台程序,选择.net framework 3.5 ,项目名称为:WindbgDemo,并编写代码如下:
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace WindbgDemo
{
    class Program
    {
        private static string _csdnUrl = "https://www.csdn.net/";
        public static string BaiDuUrl = "https://www.baidu.com/";
        static void Main(string[] args)
        {
          
            ThreadPool.QueueUserWorkItem((a) => {
                new DownLoadBp().DownLoadOperation(BaiDuUrl);
            });
            //堵塞主线程
            string readRet=Console.ReadLine();
            Console.WriteLine("主线程读取到的结果:" + readRet);
            Console.ReadKey(true);
        }
    }
    public class DownLoadBp
    {
        public void DownLoadOperation(string url)
        {
            Console.WriteLine("子线程:url地址:"+url);
            string readRet = Console.ReadLine();
            //堵塞子线程
            Console.ReadKey(true);
            Console.WriteLine("子线程读取到的结果:" + readRet);
        }
        
    }
}

2  生成程序,先打开任务管理器(由于是win10的64位操作系统,所以默认打开的是64位的任务管理器),再打开应用程序,Dump出转储文件,如下图:

2.1   使用WinDbg Preview打开Dump文件

既然是32位应用程序导出的dump文件,那么我们这次目标框架为x86

输入:

.load sos
!threads

后会报No export threads found的错误,那么我们试试手工导入sos版本

输入

 .load C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll

!threads 

后会报如下的错误
SOS does not support the current target architecture.

如下图:

那么最后试试2.0版本的sos.dll

.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\SOS.dll
!threads

见鬼,一样报SOS does not support the current target architecture.这样的错误

关掉WinDbg Preview后再以x86的方式打开Dump文件,这次先输入:

.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\SOS.dll

再次输入!threads,就报如下的错误:

Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

又是提示版本不一致了,看着有戏,看看是不是64位的任务管理器导出的原因

输入命令:!wow64exts.sw   可以看到切换成功了,如下图:

Switched to Guest (WoW) mode
*** WARNING: Unable to verify checksum for mscorlib.ni.dll

接着输入!threads,可以看到输出线程信息了,如下图:

 接着试试堆栈信息命令好不好使,可以看到命令好使了

2.2  使用老版32位的WinDbg测试

 输入:.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\SOS.dll

后再次输入:!threads,输出报错如下:

Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

又是版本不对,试试切换到32位模式

输入:!wow64exts.sw 后可以看到切换成功了(如果这一步报错:可以把soswow64.dll这个dll放到WinDbg运行的根目录下,后面步骤有下载地址),再次输入!threads,可以看到线程信息了,如下图:

 

试试切换线程及线程堆栈信息

~~[4d24]s
 !clrstack

很不幸,当要查看堆栈时,发现报如下的错误:

OS Thread Id: 0x4d24 (5)
Failed to start stack walk: 80070057
 

网上有博主说可以用命令

!dumpstack -ee进行替换,试了一下,确实可以

 

但不是我想要的,由于是使用64位的任务管理器导出的32位的dump文件,这时需要下载soswow64.dll这个dll放到WinDbg运行的根目录下,如下图:

  这个soswow64.dll可以从WinDbg相关.rar · 张祥裕/分享的资源名称 - Gitee.com这里下载,找到里面的压缩包soswow64.zip

接着输入

 .load soswow64命令

 可以看到导入成功,接着再来看堆栈信息,可以看到成功了

好了,本文到此结束。 

 

 

 


 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xcode 15 beta (15A5160n) - Apple 平台 IDE

Xcode 15 beta (15A5160n) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-14/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Xcode 15 使…

windows系统cmd命令设置别名,并添加到环境变量

众所周知&#xff0c;Linux 命令很强大&#xff0c;使用起来也很方便&#xff0c;但是想在 windows 系统上使用 Linux 命令有些困难&#xff0c;要么下载第三方终端工具&#xff0c;要么就是安装一系列命令环境。 作为一个前端开发&#xff0c;其实可以全局安装一下 npm 命令行…

分库分表-ShardingSphere

分库分表拆常见分方法与特点 分片策略 数据分布 以后扩展 基于Hash&#xff1a;hash(分片键)%分片数 数据分布均匀 不易扩容&#xff0c;扩容需要数据迁移 范围分片&#xff1a;例如按年分&#xff0c;按月&#xff0c;按日 数据分表可能不均匀 易扩展&#xff0c;扩展…

API自动化测试利器Postman,帮助你更好地进行 API 自动化测试

目录 前言&#xff1a; 一、基本功能 二、测试工具 三、示例 前言&#xff1a; Postman 是一个易于使用的 API 开发和测试工具&#xff0c;可以在其中快速构建、测试和文档化 Web API。Postman 提供了一个直观的用户界面&#xff0c;可以轻松地创建 HTTP 请求、测试响应、…

深入解析XMLHttpRequest:实现异步通信的利器

文章目录 介绍什么是XMLHttpRequest&#xff1f;XMLHttpRequest的基本用法1.创建XMLHttpRequest对象2.配置请求3.发送请求 XMLHttpRequest 属性sendreadyStatestatusstatusTextresponseresponseTextresponseTyperesponseURLtimeoutwithCredentials 异步请求与同步请求请求类型和…

淡季,老手买入的季节。

刚在刷抖音&#xff0c;刷到马云的视频。心里在想&#xff1a;这么大的企业家大富豪怎么会哽咽呢&#xff1f;他缺钱吗&#xff1f;他需要为生存奋斗吗&#xff1f; 他当然不缺钱&#xff0c;也不需要为生存去奋斗。如果以家庭生活支出来算&#xff0c;他的钱够几代儿孙挥霍了。…

漂亮国因一颗气球而疯狂给质量团队带来的启示

最近漂亮国因为我国的一颗漂洋过海的淘气的民用气球而疯狂。这颗气球成功躲过了号称全球最先进的防空系统&#xff0c;跨越大半个漂亮国&#xff0c;直到被一居民拍照无意间发现&#xff0c;漂亮国才反应过来。多次派战斗机拦截无果&#xff0c;在气球降到15km后&#xff0c;F2…

数据链路层之以太网协议基本知识总结分享

目录 1. 以太网协议报文格式 2. MTU是什么?它对哪些协议有影响? 1. 以太网协议报文格式 这里的目的地址不是ip地址,是Mac地址,mac地址是6个字节,比ipv4地址大了2个字节,当前的mac地址是可以让每个设备都是唯一的,且不需要动态分配,一般是网卡出厂就分配好了的.这就代表我们…

【他山之石】基于Echarts表格的时间线(轴)组件触发时间变化事件,带多种方案比较

【他山之石】基于Echarts表格的时间线组件触发时间变化事件 1 背景2 调整思路3 函数监听 1 背景 在开发中遇到一个场景&#xff1a;要展示的数据随着时间的变化发生改变&#xff0c;有以下几点要求的的时间线。 水平方向可以切换时间变化&#xff0c;带播放按钮时间节点背景图…

chatgpt赋能python:Python编程:如何删除前面的代码?

Python编程&#xff1a;如何删除前面的代码&#xff1f; 在Python编程中&#xff0c;我们有时会需要删除之前写的一些代码&#xff0c;以便更好地组织我们的代码结构和逻辑。那么&#xff0c;Python中如何删除前面的代码呢&#xff1f;在本文章中&#xff0c;我们将为您详细介…

python字符串格式化通过占位符拼接

我之前写了python字符串拼接 但我们会发现 它不太好用 第一个 当变量很多的时候 会写的很长 第二个 是python中字符串不能直接和其他类型的变量拼接 字符串格式化 也属于是字符串拼接的一种方法 语法上不是使用加号 我们打开编辑器 编写代码如下 weight 8.70; age 2; name…

Nvidia AGX Orin MAX9296 /MAX9295驱动寄存器配置

MAX9295 配置说明 1.Max9295 的功能及应用 MAX9295 是把 MIPI CSI-2 转化成 GMSL2 或者 GMSL1 信号&#xff0c;该信号是可以通过 15m 长的线缆发送或接受控制数据以及传递 video 数据和双向的控制数据。 GMSL2 有固定的速率&#xff0c;正向的速率为 3Gbps 或者 6Gbps &…

SpringBoot整合Flyway实现数据库的初始化和版本管理

文章目录 一、Flyway1、介绍2、业务痛点3、个人理解 二、SpringBoot整合flyway1、整合2、SQL文件命名3、版本号校验算法4、工作流程5、注意事项 一、Flyway 1、介绍 Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用&#xff0c;或者在Java应用程序中引入…

win10无法使用浏览器上网问题总结贴(附带解决办法)

现象 电脑连接WIFI之后&#xff0c;可以登录微信但是一直打不开网页&#xff0c;其它软件也无法联网。 解决办法 重启大法 遇到这种问题通常最简单有效的办法就是&#xff0c;重启电脑&#xff0c;然而在我重启完成之后还是这样无法使用浏览器上网疑难解答 使用win10的疑难解…

【EraAI智能写作助手】一键生成精准文案,让创作更高效

一键生成精准文案&#xff0c;让创作更高效&#xff01; 传送门【EraAI智能助手】&#xff1a; txt.eraai.cn 亲爱的文案创作者和营销人员&#xff0c;您是否常常为文案创作而烦恼&#xff1f;现在&#xff0c;有了EraAI智能助手&#xff0c;让您的创作事半功倍&#xff01;我…

Qt详解实现TCP文件传输例子(文件下载和上传)附源码

网络通信我们用的很频繁&#xff0c;如文字&#xff0c;语音&#xff0c;文件&#xff0c;图片等&#xff0c;这个些传输方式都差不多 QT文件传输主要考验对传输的控制&#xff0c;还是需要点逻辑的&#xff0c;文件传输的大致框架如下 先看一下简单例子实现的效果&#xff08…

【Python】使用pdf2docx库将.pdf转化为.docx

1、使用VS code搭建Python编译环境 2、安装pdf2doc库1 pip install pdf2docx3、编写代码 3.1 使用parse将pdf转化为docx 编写 pdf2docxParse.py from pdf2docx import parse # 文件名 pdf_file demo-image-overlap.pdf docx_file demo-image-overlap.docx# 将pdf转为doc…

vue 3 第三十六章:vite环境变量(.env文件的配置及使用)

文章目录 1. 环境变量使用场景2. 创建.env文件3. 在应用程序中使用环境变量3.1. 输出结果&#xff08;开发环境&#xff09;&#xff1a;3.2. 输出结果&#xff08;生产环境&#xff09;&#xff1a; 4. 在 vite 中使用环境变量 1. 环境变量使用场景 区分不同的环境。在Vite中…

【LeetCode】160. 相交链表

160. 相交链表&#xff08;简单&#xff09; 题解 对于这道题&#xff0c;首先要理解题意&#xff1a;如果两个单链表会相交&#xff0c;那么返回相交的起始节点&#xff1b;否则返回 null。 无需看“自定义评测”部分。 假设链表 A 的头节点到相交点的距离为 a&#xff0c;链…

S32K324芯片学习笔记-Clock

文章目录 Clock详解特征时钟生成MC_CGM mux 0时钟时钟输出概述其他时钟整体框图时钟源芯片时钟源芯片输入时钟芯片输出时钟FIRC快速内部RC振荡器待机模式下的FIRC_CLK行为 SIRC慢速内部RC振荡器待机模式下的SIRC行为 FXOSC快速外部晶振慢速外部晶振PLL锁相环配置PLL配置序列 芯…