当前位置: 首页 > article >正文

学习用WinDbg查看程序当前运行的堆栈

使用场景

假设自己开发的程序出现了未知原因的卡死,该怎么调查呢?
最好的方式肯定是用VS重现一下,查看卡死时候的堆栈来调查。

但很多时候这种理想的情况不存在,一是重现的时间可能很长,二是可能不稳定,所以当前卡死的情况可能是“珍贵”的。
此时最好的方法是使用VS附加(Attach)到进程。但这个也有一些限制。
另一种方式是,创建转储(dump)文件,而这个dump文件可以用WinDbg来打开调查运行的堆栈。最近同事教了我这种方法解决了一个问题,我备忘一下。

0. 创建转储(dump)文件

为了测试,我在UE里面故意做一个按钮,点击就 Sleep 30秒来模拟程序卡死的情况:
在这里插入图片描述
等点击按钮后进入卡死的时候。打开任务编辑器,右键这个进程“创建内存转储文件”。
在这里插入图片描述
等待一段时间
在这里插入图片描述
创建好后,会告诉你位置。
在这里插入图片描述

1. 下载安装WinDbg

Install WinDbg - Windows drivers | Microsoft Learn
在这里插入图片描述
在这里插入图片描述

2. 使用WinDbg查看程序当前运行的堆栈

打开WinDbg。选择 Open dump file,并且填入刚才保存的dump文件。
在这里插入图片描述
在Stack界面即可看到堆栈,此时可以看到是调用了 Sleep 造成的卡死。
在这里插入图片描述


http://www.kler.cn/a/586600.html

相关文章:

  • [C语言日寄] qsort函数的练习
  • css模拟雷达扫描动画
  • 用ST7789屏幕导致负片(反色)的问题
  • Alembic 实战指南:快速入门到FastAPI 集成
  • 深入解析对象存储及工作原理
  • Java 综合实战项目:生成不重复随机字符串数组
  • Android LeakCanary 使用 · 原理详解
  • 微信小程序面试内容整理-数据绑定
  • AcWing 4889. 空调II
  • Rust语言的信号量
  • 【STM32】USART串口协议串口外设-学习笔记
  • 【深度解析:以“不要的心态”获取所求的本质逻辑】
  • 反射、反射调用以及修改成员变量,成员方法,构造函数、反射的应用
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_11多功能组合的固定表头表格
  • 绿色高效运维:分布式光伏监控系统的全生命周期管理
  • 文件系统 linux ─── 第19课
  • 新手村:统计量均值、中位数、标准差、四分位数
  • 将pdf或者word转换成base64格式
  • 通达信软件+条件选股+code
  • 如何在github上参与开源项目