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

ProcDump 学习笔记(6.7):监视异常(未处理/首机会/消息过滤/进程终止)

ProcDump 学习笔记(6.7):监视异常(未处理/首机会/消息过滤/进程终止)

  • ProcDump 学习笔记(6.7):监视异常(未处理/首机会/消息过滤/进程终止)
    • 1)为什么用“异常触发”?
    • 2)异常基础速览:首机会 vs 二次/未处理
    • 3)最常用命令模板
      • 3.1 抓“未处理异常”一份完整 Dump
      • 3.2 抓“首机会异常”,并按消息/类型关键字**过滤**
      • 3.3 进程**终止**时也抓一份(兜底)
      • 3.4 等目标“出现再附加”(服务/按需启动进程)
      • 3.5 控制抓取份数,避免刷盘
    • 4).NET 特殊建议(托管异常)
    • 5)原生(SEH)常见异常关键字
    • 6)输出策略与体积控制
    • 7)常见坑与排查
    • 8)即拿即用清单
    • 9)小结

本文承接 6.6,聚焦 异常触发抓 Dump。不同版本参数细节可能略有差异,请以你机器上的 procdump -? 为准。

ProcDump 学习笔记(6.7):监视异常(未处理/首机会/消息过滤/进程终止)

1)为什么用“异常触发”?

很多故障只在抛异常时出现:

  • 原生(SEH)访问违规、栈溢出、除零等;
  • .NET 运行时异常(NullReferenceExceptionOutOfMemoryException…);
  • 业务代码主动 throw 的致命错误。

与“CPU/内存阈值”相比,异常触发能在“问题瞬间”精准落点,Dump 里包含现场调用栈、寄存器、托管/非托管堆对象等关键证据。


2)异常基础速览:首机会 vs 二次/未处理

  • 首机会(First-chance):异常刚抛出,在被 try…catch 处理前,调试器先收到通知。多数会被应用“吞掉”,因此量大且嘈杂。
  • 未处理/二次机会(Unhandled/Second-chance):异常未被捕获,会导致程序崩溃(或被 JIT/AE 调试器接管)。这类更“干净”,通常直接定位根因。

抓取策略:先用未处理(更稳、噪声低);若问题被“吞异常”,再尝试首机会 + 过滤


3)最常用命令模板

3.1 抓“未处理异常”一份完整 Dump

:: 未处理异常触发;生成完整转储(-ma)
procdump -e -ma <进程名或PID> "D:\Dumps\Unhandled"

3.2 抓“首机会异常”,并按消息/类型关键字过滤

:: 首机会(-e 1),按关键字过滤(-f,支持多个词用 | 连接)
procdump -e 1 -f "NullReferenceException|OutOfMemoryException|0xC0000005" -ma <进程名或PID> "D:\Dumps\FirstChance"

说明

  • -e 1:首机会;不带 1 则仅未处理。
  • -f "<关键字>":匹配异常类型名(托管)或消息/代码片段;可并列多个。
  • 过滤很关键,否则首机会异常量可能巨大。

3.3 进程终止时也抓一份(兜底)

:: 进程退出/崩溃即抓(常配合 -e)
procdump -t -ma <进程名或PID> "D:\Dumps\OnExit"

3.4 等目标“出现再附加”(服务/按需启动进程)

:: 等进程出现后监听异常;最多抓两份以防刷盘
procdump -w MyService.exe -e -n 2 -ma "D:\Dumps\SvcCrash"

3.5 控制抓取份数,避免刷盘

:: 任意触发条件都建议叠加 -n
procdump -e 1 -f "AccessViolation|0xC0000005" -n 3 -ma <PID> "D:\Dumps\Guarded"

4).NET 特殊建议(托管异常)

  • 关键词直接用类型名或常见文案:
    -f "System.NullReferenceException|System.OutOfMemoryException|TaskCanceledException"
  • 大量被吞的业务异常 → 建议短时窗口开启首机会 + 过滤,配合 -n 控制份数。
  • 如果要分析Managed 堆对象GC 情况,转储类型用 -ma(完整);后续用 WinDbg + SOS/NetExtdotnet-dump 分析。

5)原生(SEH)常见异常关键字

  • 0xC0000005AccessViolation(最典型的崩溃)
  • 0xC00000FDStackOverflow
  • 0xC0000094:整数除零
  • 0xC0000409:栈缓冲区溢出(/GS 保护)
procdump -e 1 -f "0xC0000005|AccessViolation" -ma <PID> "D:\Dumps\NativeCrash"

6)输出策略与体积控制

  • 优先目录化"D:\Dumps\{场景}",避免覆盖;ProcDump 会带时间戳命名。
  • 体积优先:试 -mp(较小的迷你转储);如需托管堆、句柄、内存镜像再上 -ma
  • 次数限制永远加 -n(如 1~3);避免异常风暴导致磁盘打爆。

7)常见坑与排查

  • “就是不触发”

    • 异常被完全吞掉 → 用 -e 1 首机会 + -f 过滤;
    • 目标启动在你之前 → 用 -w 等待模式;
    • 权限不够(服务/系统会话)→ 以管理员/相同会话运行。
  • 首机会过多:过滤不够、-n 没限制;先收敛关键字,或短时间抓取。

  • Dump 太大/太多-mp + -n + 单独文件夹。


8)即拿即用清单

:: A. 未处理异常(稳定首选)
procdump -e -ma <进程名或PID> "D:\Dumps\Unhandled":: B. 首机会 + 过滤(仅抓关键异常)
procdump -e 1 -f "NullReferenceException|0xC0000005" -n 2 -ma <PID> "D:\Dumps\FirstChanceKey":: C. 进程终止兜底
procdump -t -n 1 -ma <进程名> "D:\Dumps\OnExit":: D. 服务类:等待出现 + 未处理异常
procdump -w MyService.exe -e -n 2 -ma "D:\Dumps\SvcCrash":: E. .NET OOM 专项
procdump -e 1 -f "OutOfMemoryException" -n 1 -ma <PID> "D:\Dumps\OOM"

9)小结

  • 异常触发是最直接、最可靠的“问题瞬间”采样方式。
  • 推荐路径:先未处理(-e)→ 再首机会(-e 1 + -f;全程用 -n 保护盘位。
  • 结合 6.5 的“输出策略”和 6.6 的“阈值触发”,可以覆盖绝大多数生产现场故障。
  • 下一篇(6.8)我们将整理 “转储文件选项”:何时用 -ma、何时用 -mp,以及其它细节参数。
http://www.dtcms.com/a/528795.html

相关文章:

  • C++编程实践——Linux下的CPU控制
  • NTRU 公钥加密系统详解
  • 深入浅出 VGGNet:经典卷积神经网络解析
  • 盐城整站优化柳州做网站去哪家公司好
  • 协程:实战与系统集成(高级篇)
  • 芯片验证基石UVM:高效验证的方法论与挑战
  • 旅游网站开发的作用seo快排技术教程
  • 3DS-GBA-GBC-NDS-switch梦可宝精灵游戏合集 -全汉化游戏
  • VCS Verdi 2023安装
  • R语言~T检验
  • 春季大扫除:清理 Arch Linux 中的垃圾
  • 未在props中声明的属性
  • php网站iis设置同心食品厂网站建设项目任务分解
  • 中国启用WPS格式进行国际交流:政策分析与影响评估
  • 中文域名做的网站有哪些网站域名怎么做分录
  • Docker使用【镜像】
  • 全链路智能运维中的业务连续性保障与容灾切换机制
  • linux的文件系统
  • 英语四级真题完整版(1990-2025)|2025年6月最新试题+答案解析|可打印PDF
  • 网站开发 项目的人员分配建筑工程网络计划编制软件
  • React 06
  • 红河县网站建设昆明网站建设哪家
  • 社区互助养老系统设计与实现方案
  • 服装购物商城网站建设安徽六安旅游必去十大景点
  • 「用Python来学微积分」14. 连续函数的运算与初等函数的连续性
  • 红酒商城网站建设广告设计案例网站
  • Linux内核进程管理子系统有什么第六十七回 —— 进程主结构详解(63)
  • 哪个网站可以接针织衫做单淘宝上找人做网站
  • C++容器deque
  • 【NestJS】 OpenAPI文档:运行时动态生成揭秘