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

ProcDump 学习笔记(6.14):在调试器中查看转储(WinDbg / Visual Studio 快速上手)

ProcDump 学习笔记(6.14):在调试器中查看转储(WinDbg / Visual Studio 快速上手)

  • ProcDump 学习笔记(6.14):在调试器中查看转储(WinDbg / Visual Studio 快速上手)
    • 1)打开前的三个要点
    • 2)WinDbg(经典路径)
      • 常用指令速查
      • .NET 托管进程必备(SOS)
    • 3)Visual Studio(图形化快速定位)
    • 4)一键初始化脚本(WinDbg 粘贴即可)
    • 5)三大场景的“最短路径”
    • 6)常见坑位与规避
    • 7)结语

ProcDump 学习笔记(6.14):在调试器中查看转储(WinDbg / Visual Studio 快速上手)

抓到 Dump 只是第一步,**在调试器里把证据“翻译成结论”**才是价值所在。本文给出 WinDbg/VS 的最短路径与常用指令清单,覆盖 Crash、Hang/高 CPU、OOM 三大高频场景。


1)打开前的三个要点

  • 匹配位数:x64 进程用 WinDbg x64 打开;x86 进程用 WinDbg x86。位数不匹配会导致扩展/堆分析异常。

  • Dump 类型决定可见性

    • MiniPlus:轻量,适合初判(栈/线程/模块/句柄);
    • Full:包含全部用户态内存,适合大堆/OOM/泄漏深挖。
  • 符号路径(强烈建议设置缓存)

    srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
    

2)WinDbg(经典路径)

  1. File → Open Crash Dump 选择 .dmp

  2. 在命令窗口依次执行(可粘贴一整段):

    .symfix; .sympath+ srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
    .reload /f
    !analyze -v
    

常用指令速查

  • 异常/崩溃

    !analyze -v
    .ecxr           ; 切到异常上下文
    k/kp/kv         ; 查看当前线程调用栈
    lm              ; 模块列表(看自家模块/PDB是否加载)
    
  • Hang / 高 CPU

    !runaway        ; 统计各线程累计 CPU 时间 → 锁定最忙线程
    ~* kb           ; 所有线程栈
    !locks          ; 互斥/临界区死锁线索(exts 扩展)
    
  • 本机内存/OOM(原生)

    !address -summary
    !heap -s
    !heap -flt s 400    ; 找 >= 0x190(400) 字节分配热点
    !handle 0 7         ; 句柄分布(对象泄漏线索)
    

.NET 托管进程必备(SOS)

  • 加载 SOS:

    .loadby sos clr          ; .NET Framework
    .load sos                ; .NET Core/5+/需要定位 sos 路径时
    
  • 托管堆/对象分析:

    !eeheap -gc
    !dumpheap -stat
    !dumpheap -type System.String
    !gcroot <ObjAddr>
    !threads
    !clrstack
    !syncblk                 ; 锁等待/争用
    

经验:!runaway 找最忙线程 → 看该线程 !clrstack/kp;OOM 则优先 !dumpheap -stat 看大类对象、再 !gcroot 溯源。


3)Visual Studio(图形化快速定位)

  1. 直接双击 .dmp(或 VS:File → Open → File…);
  2. 选择 Debug with Mixed/Managed/Native(按进程栈类型选择);
  3. 重点界面:Call Stack / Threads / Exception / Diagnostic Tools
  4. 托管堆:VS 自带托管内存分析较弱,建议配合 WinDbg+SOS 做深挖。

VS 优点是低门槛源码/断点联动;复杂场景(泄漏、大堆、锁)仍建议回到 WinDbg。


4)一键初始化脚本(WinDbg 粘贴即可)

.symfix; .sympath+ srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
.reload /f
!analyze -v
.bp kernel32!RaiseException ; 若为异常类问题,可临时断在抛处(适用于活体调试)

.NET 追加(若是托管):

.loadby sos clr
!threads
!clrstack
!eeheap -gc
!dumpheap -stat

5)三大场景的“最短路径”

  • Crash
    !analyze -v → .ecxr → kv/kp → 定位异常方法与参数 → 源码 & 复现
  • Hang / 高 CPU
    !runaway → 锁定最忙线程 → ~#s 切换 → kb/!clrstack → !locks/!syncblk
  • OOM/泄漏
    (原生)!address -summary → !heap -s/!heap -flt
    (托管)!eeheap -gc → !dumpheap -stat → !dumpheap -type X → !gcroot

6)常见坑位与规避

  • 位数不匹配:x64 Dump 请用 x64 WinDbg,x86 同理。
  • 无符号/PDB:设置好符号服务器与本地缓存;自家模块尽量产出 PDB。
  • MiniPlus 不含大堆:看不到对象内容是正常现象,改用 Full Dump。
  • SOS 版本不匹配:优先 .loadby sos clr;.NET Core/5+ 需对应 runtime 的 sos。
  • 优化内联导致栈不完整首选带符号的 Release,必要时临时禁用过激优化以复现。

7)结语

  • Dump → 10 分钟得到方向:WinDbg 基本三板斧(!analyze -v / 栈 / 符号)即可排除 70% 的不确定性;
  • 形成团队模板:Crash/Hang/OOM 三类“指令清单 + 结论模版”,让排障从“个人技巧”变成“流程资产”。
http://www.dtcms.com/a/541684.html

相关文章:

  • 正规网站建设报价网站建设案例精粹 电子书
  • PE之不同区域的结构体定义
  • Ubuntu24.04 赋予 Qt 应用程序 修改系统时间 权限
  • 50+孙悦梓潼舞台状态惊艳全网!自律的女神,连下颌线都是顶配
  • Rust:复合类型内存布局
  • net网站是国际域名吗wordpress发布文章页面错误
  • 英语学习 第一周 重难点
  • 做国际网站的流程unity做网站
  • 模板性公司网站图片网站制作的发展趋势
  • 石英加速度计如何敏锐感知飞机爬升与转弯的细微变化?
  • 【VS2019配置Boost】vs2019无法识别boost库目录
  • 要进一步增强门户网站建设合力有几个网站能在百度做推广
  • 常德网站建设常德做用户运营应该关注哪些网站
  • 目前做的最好的招聘网站外贸网站建设谷歌推广
  • 有空间与域名 怎么做网站为什么自己做的网站别的电脑打不开
  • 【AI大模型应用宝典60题】31-35
  • 03-Machine-5-fpioa.py K230 IO引脚复用功能演示
  • 郑州哪里培训网站建设优化好一点庆阳环境包装设计
  • 网站建设工作自策划实施以来网站开发实例社区
  • AI未来--零售行业“AI赋能,价值提升”
  • 京东网站建设策划书项目管理软件哪个好
  • 小程序中获取元素节点
  • 山东省聊城建设学校网站《网站开发实践》 实训报告
  • Android Service 的一个细节
  • 【QT】QTimer定时器读取寄存器的值
  • 2025年Java 面试题汇总(含答案解析)
  • 2025年--Lc221--144. 二叉树的前序遍历(递归版)-Java版
  • 生成式AI辅助教学设计的实践探索:从教案生成到教学评价的全流程优化
  • 做网站小程序挣钱吗互联网定制网站
  • 【场景题】List集合去重