zoukankan      html  css  js  c++  java
  • .net 程式進階除錯教學

     https://caryhsu.blogspot.com/2011/11/net-windbg.html
            從以前一直研究基金方面的資訊,但由於沒有多於的時間常常觀看,再加上碩士時在我們老師的指導下,我將基金的資訊透過 Data Mining的模式進行分析,但由於Data Mining需要大量的資訊,所以我設計了一個資料搜集器,會從各大網站中進行基金資訊的收集,而這個程式我是從 c# 2.0的時候就開始寫了,功能不斷的增加,原本初期是希望透過排程自動化處理,但是一直以來有一個小問題,由於我的系統中使用了多個執行緒,所以有時候系統會卡住不動,然後就一直停住,而且有時候是不預期的發生,所以這支蟲我也捉了好久,由其是在功能不斷的新增之後,還是沒有改善。



            最近在公司知道有一個好工具可以進行分析,名稱為WinDbg,所以我就拿這個問題來小試身手,我將安裝步驟與解決方法列於下方,再請大家多多參考。

    1、下載 WinDbg 工具

    1-1. 先至微軟的官方網站下載,此工具分成兩個版本,一個是32位元,一個是64位元,基本上這不是取絕於你的OS為何,而是你要除錯的程式為32位元還是64位元,那要如何分辨呢?最簡單的方式就是透過工作管理員確認即可。



    下載網址:
    http://msdn.microsoft.com/en-us/windows/hardware/gg463009



    2、重現應用程式卡住的情況,然後進行下列的動作,收集dump files。
      
    2-1. 確認應用程式執行的是32還是64位元的。

    2-2. 啟動一個命令視窗,切換至安裝目錄下:

    •      x32 -> C:Program Files (x86)Debugging Tools for Windows (x86)
    •      x64 -> C:Program FilesDebugging Tools for Windows (x64)

    2-3. 由於我的應用程式是Hang的情況,所以請執行下列的指令:

    adplus.exe -hang -quiet -pn fund.vshost.exe -o c:dumps

         參數說明:
    • -hang 執行adplus在Hang的模式。
    • -o 指定輸出路徑
    • -quiet 不跳出快顯視窗
    • -pn 指定應用程式的名稱
          
     
    2-4. 確認在 c:dumps 的檔案夾下是否有產生dump files

    3、設定 WinDbg 的環境

    3-1. 開啟 windbg 之後,選擇 [File] -> [Symbol File Path]


    3-2. 在開啟的視窗中輸入下列的資訊:          

    SRV*c:websymbols*http://msdl.microsoft.com/download/symbols



    4、分析 Dump Files

    4-1 開啟 WinDbg

     
    4-2. 載入後,所以的動作皆需透過指令的方式完成,而輸入的地方就在下方 [0:000 >] 的旁邊。
    4-3. 輸 [k] 觀察程式中 stack的狀態,輸入後你會發現出現許多的 mscorwks 這也代表您的應用程式是執行在.Net之下。


    4-4. 由於我們觀察 .Net的相關記憶體與物件資料,所以需要載入 sos.dll,請在命令視窗中輸入下列的指令。

    .loadby sos mscorwks


    4-5. 載入後我們 透過下列的指令來確認目前.net 中 stack的情況。

    ~*e!clrstack


    4-6. 透過4-5的指令可能會列出許多的資訊,請仔細觀察後,終於找到卡住的地方,也就是下列紅色圈起來的地方,主要是卡在 [set_page_property],因為這個函式中有一個迴圈會不斷的等待執行緒的回傳,我作了兩個動作,一是初使值的設定,二是等待超過1分鐘就強迫停止這一個執行緒的資料捉取,所以改完後問題就解決了。

     
    PS:在上圖中有一個箭頭由下往上,主要指的是由於這是一個stack的資料結構,所以你可以看出是由 Update_basic() -> external_company() -> set_page_property(),藉以了解執行的順序。


    參考連結:
    WinDbg Command-Line Options
    http://msdn.microsoft.com/en-us/library/ff561306(v=vs.85).aspx
    SOS.dll (SOS Debugging Extension)
    http://msdn.microsoft.com/en-us/library/bb190764.aspx
    Debugging Tools and Symbols: Getting Started
    http://msdn.microsoft.com/en-us/windows/hardware/gg462988
  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/zengkefu/p/6984563.html
Copyright © 2011-2022 走看看