利用WinDbg查看堆栈中方法入参的值4(C#)

news/2025/2/13 0:11:26/

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

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

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

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

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

本文目的,就是查看导出的dump文件中堆栈中的方法参数值,这样方便后续分析问题

本文测试环境:

.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 获取dump文件,参考前面的博文

3   利用!threads查看线程

4  利用~~[4d24]s切换到4d24线程 

5 利用!clrstack -p 获取到详细的堆栈及地址信息

 可以看到方法WindbgDemo.DownLoadBp.DownLoadOperation中的参数名称为url,对应的值的地址为:0x0000000003222bd8

6  利用 !do  地址值   查看 地址0x0000000003222bd8对应的值,如:

!do  0000000003222bd8

可以看到字符串的值为:https://www.baidu.com/

刚好与前面C#程序中的代码对应上:


http://www.ppmy.cn/news/330950.html

相关文章

Trie树模板与应用

文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 Trie树(字典树)基本思想例题 Trie字符串统计code关于idx的理解 模板总结应用 最大异或对分…

【Java|多线程与高并发】volatile关键字和内存可见性问题

文章目录 1.前言2. 编译器优化带来的内存可见性问题3. 使用volatile保证内存可见性5.volatile不能保证原子性以JMM的角度看待volatile总结 1.前言 synchronized和volatile都是Java多线程中很重要的关键字,但它们的作用和使用场景有所不同。 synchronized关键字可以…

竞技游戏耳机哪种好?竞技游戏专用蓝牙耳机推荐

作为一名游戏爱好者,平常在打游戏的时候身边一定会有游戏外设,游戏外设可以辅助我在游戏中有着更佳的体验;经常陪伴我的游戏外设就是蓝牙耳机了,平常我也不喜欢戴有线的耳机,对于我来说无线耳机是最方便的,…

哪款蓝牙耳机游戏体验感好?适合打游戏的蓝牙耳机推荐

随着蓝牙耳机市场的竞争日益激烈,不同品牌配置的耳机价格差异也是十分巨大的,这些原因就导致了我们选蓝牙耳机比较复杂,那么想要一款玩游戏体验感很棒的耳机该怎么选呢?耳机的品质好坏可以从外观质感和耳机元件配置上看。想要挑选…

什么游戏蓝牙耳机好?专业电竞玩家教你如何选择

现在真无线蓝牙耳机早已经成为了我们日常生活中最常见也最受欢迎的一种音乐设备,少了从前有线耳机的束缚和线材的局限。虽然使用起来更加方便,但在信号传输上还是有大部分蓝牙耳机的延迟较高,而对于游戏党来说耳机的延迟功能也就非常重要&…

有什么专业打游戏的蓝牙耳机?四款电竞蓝牙耳机推荐

蓝牙耳机的口碑足够好的话,绝对会传遍整个数码界。像今天我介绍的这几款蓝牙耳机,在数码圈就是口碑被吹爆的存在,兼具平价和高性能的优点,音质非常不错,所以很值得专门写一篇推文来进行推荐,放心吧&#xf…

打游戏的蓝牙耳机推荐哪一款?英雄联盟电竞耳机推荐

现如今的生活节奏越来越快,人们的压力越来越,工作余后的时光该怎么调节心情呢?听听音乐是个不错的选择。比较低传统的耳机线收起来总是缠缠绕绕的,使用起来不方便,近年来出的真无线蓝牙耳机市场也是非常火爆&#xff0…

编译详细过程与交叉编译

GCC的编译过程: GCC编译分为四步,预处理、编译、汇编、链接。具体功能如上图所示,我们在稍微解释一下: 1.预处理: 实现过程:gcc -E xxx.c -o xxx.i 目的:我们的c程序中除了main函数以外&…