• windbg 调试 winform程序(二车间机台程序)


    背景:

    车间机台12点40分钟无缘故死机,而且不少机台这样,是同一秒死机,程序日志没有记录任何有用信息。和windows日志,有Application Hang的错误,以及Windows Error Report错误,也指示ApplicaitonHangB1错误。

    但测试网络的ping程序,未在错误发生时间点,记录到异常。

    应对策略:

    在出问题的时机,到现场直接转储机台程序的进程内存,分析转储文件。看看主线程堆栈到底在哪Hang住。

    Dump机台程序:

    因为机台程序(Com.Wisdom.TJOD.Client.App.exe)是以32位运行的,故用32位任务管理器Dump C:\Windows\SysWOW64\Taskmgr.exe 32位任务管理器。

    Symbol Search Path设置:

    路径最好不要有中文。 前部分是程序文件,后部分指定下载目录。 

    C:\Users\Administrator\Desktop\bug\debug;srv*d:\symbols*http://msdl.microssoft.com/download/symbols

    保存Symbol Search Path设置:

    每次Save Workspace,再次调试时再Open workspace,就能记住Symbol Search Path。

      

    加载sos:

    机台是车间电脑,为win10,本机也是win10,但.net sos.dll版本不同。需要从机台获取sos.dll

    SOS.dll 随 .NET Framework 安装在 %windir%\microsoft.net\framework\<.NET 版本> 目录下。我们程序在这,C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll

    用 .load  C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll 加载

    用.chain 测试是否加载成功。

    用 !eeversion 测试是否加载的是正确sos.dll版本。

    因为程序hang住,故查看线程堆栈。!threads 查看线程

     !eestack 查看所有线程堆栈   !clrstack 查看当前线程托管堆栈

    切换线程:

    ~3  查看3号线程

    ~3s   切换到3号线程

    清屏:

    .cls

    查看符号

    lm 列出模块,deferred 是迟加载的意思

    若要强制加载符号,使用.reload /f

    参考:https://www.cnblogs.com/kekec/archive/2012/12/02/2798020.html

     https://www.cnblogs.com/lbq1221119/archive/2008/06/17/1224301.html

  • 相关阅读:
    高手 读书笔记-1.精英社会的神话
    企业IT架构转型之道 读书笔记-1.阿里巴巴集团中台战略引发的思考
    Redis学习-内存优化
    Redis学习笔记--常用命令
    Go语言备忘录(3):net/http包的使用模式和源码解析
    Go语言备忘录(2):反射的原理与使用详解
    Go语言备忘录(1):基本数据结构
    Go的接口总结
    Go的类型断言解析
    StrangeIoc框架学习
  • 原文地址:https://www.cnblogs.com/wigis/p/15949416.html
Copyright © 2020-2023  润新知