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

学习用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 造成的卡死。
在这里插入图片描述

相关文章:

  • 代码随想录day17 二叉树part05
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring MVC 的崛起:从 Struts 到 Spring 的演进
  • 软考网络安全专业
  • selenium等待
  • Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)
  • Linux 中 Git 使用指南:从零开始掌握版本控制
  • C语言_数据结构总结10:二叉树的递归/非递归遍历
  • 深入解析对象存储及工作原理
  • Vue.js 中 class 和 style 绑定的全面解析
  • SW草图欠定义
  • export、export default 和 module.exports 深度解析
  • 流水线(Pipeline)
  • JavaScript相关面试题
  • C语言的位域操作
  • 半导体可靠性测试解析:HTOL、LTOL与Burn-In
  • 【黑马点评|项目】万字总结(下)
  • 【R语言】pmax和pmin函数的用法详解
  • 【北上广深杭大厂AI算法面试题】人工智能大模型篇...矩阵乘法GEMM!以及为什么说GEMM是深度学习的核心?
  • 【云原生技术】编排与容器的技术演进之路
  • 信息系统运行管理员教程6--信息系统安全
  • 北京今日白天超30℃晚间下冰雹,市民称“没见过这么大颗的”
  • 西王食品连亏三年:主业齐“崩”,研发人员多为专科生
  • 吉林:消纳绿电,“氢”装上阵
  • 波兰关闭俄罗斯驻克拉科夫领事馆
  • 让胖东来“自闭”的玉石生意,究竟水有多深?
  • 新疆维吾尔自治区乌鲁木齐市米东区政协原副主席朱文智被查