• .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
  • 相关阅读:
    汇编四(习题)
    汇编子程序模块化(near&far)
    win10关闭防火墙
    python中numpy中的shape()的使用
    文件的拷贝linux命令
    python中的os.path.dirname(__file__)
    ubuntu系统下安装及查看opencv版本
    用git命令行克隆项目及出现failed解决方案
    ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '
    记录CenterNet代码编译成功运行
  • 原文地址:https://www.cnblogs.com/zengkefu/p/6984563.html
Copyright © 2020-2023  润新知