從以前一直研究基金方面的資訊,但由於沒有多於的時間常常觀看,再加上碩士時在我們老師的指導下,我將基金的資訊透過 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 Files\Debugging 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

.net 程式進階除錯教學 - 使用WinDbg的更多相关文章

  1. [How To] TrueCrypt使用教學 - 重要資訊的加密保險箱(转)

    我在2013年八月的時候寫了這篇關於TrueCrypt的使用教學,但從去年(2014)五月下旬開始,TrueCrypt的首頁出現了"Using TrueCrypt is not secure ...

  2. 【NS2】NS2 教學手冊(转载)

    之前做毕设的时候搜索NS2的相关资料,发现这个里面涵盖很广,特此收藏,感谢原作者的辛勤劳作. NS2 教學手冊 ( NS2 Learning Guide) [快速連結區] My works  中文影音 ...

  3. MQTT教學(二):安裝MQTT伺服器Mosquitto,Windows系統篇

    http://swf.com.tw/?p=1005 「認識MQTT」文章提到,MQTT的訊息全都透過稱為代理人(broker)的伺服器交流.本文將說明頗受歡迎的開放原始碼MQTT伺服器Mosquitt ...

  4. 【转】Jollen 的 Android 教學,#12: 如何建立選單 Menu

    原文网址:http://www.jollen.org/blog/2009/06/jollen-android-programming-12.html Android應用程式的UI可以使用XML來定義, ...

  5. 如何利用 VisualStudio2019 遠端工具進行偵錯

    Hi 這次要來介紹 如何使用 Visual Studio 2019 遠端工具進行 Release 應用程式偵錯 首先我們先下載 2019 專用的遠端工具(這裡依照不同的 VisualStudio 版本 ...

  6. [Java] 歐付寶金流串接教學

    前言: 很多接案的人,都會碰到需要接金流的時候.而歐付寶是個台灣的金流平台. 這邊記錄下,串接的心得.我用的語言是Java, 採liferay這個portal平台,不過這份教學當然適合servlet. ...

  7. VPN Gate Client v4.11-免費、無限流量VPN翻牆(跳板)軟體(使用教學)

    VPN Gate Client安裝教學 ▼把下載的檔案壓縮後,開啟安裝檔案. ▼接下來就是一般安裝步驟,下一步>下一步   ▼同意>下一步>下一步   ▼安裝目錄可以用預設的也可以自 ...

  8. 進階gdb之core dump的除錯

    core dump的除錯 Basic Perl等語言處理的可以說是User的資料, C可以說在那邊把資料在記憶體移來移去, 組語可說把資料在暫存器搬來搬去, 越低階的處理表示握有的資源越少 所以C處理 ...

  9. MQTT教學(一):認識MQTT

    http://swf.com.tw/?p=1002 本系列文章旨在補充<超圖解物聯網IoT實作入門>,採用Arduino.ESP8266和Node.js實作MQTT物聯網通訊實驗. MQT ...

随机推荐

  1. leetcode 343. Integer Break(dp或数学推导)

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  2. [LabVIEW架构]ActorFramework(一)

    前言 小黑结婚回来第二周了,每天忙于程序设计,时间比较紧张,所以文章一直没出来,也算憋大招了. 近期小黑将与大家一起认识一下ActorFramework,既是对自己一段时间写AF程序的总结,也是梳理, ...

  3. JPA注解一对多报Could not determine type for: java.util.List错误

    在原来的项目上加新功能,启动后报Caused by: org.hibernate.MappingException: Could not determine type for: java.util.L ...

  4. ibatis中的符号#跟$区别

    昨天一个项目中在写ibatis中的sql语句时,order by #field#, 运行时总是报错,后来上网查了查,才知道这里不该用#,而应该用$,随即查了下#与$的区别.  总结如下:  1.#是把 ...

  5. WordPress函数query_posts用法汇总

    最近经常有网友跟我咨询WordPress函数query_posts的相关用法,说起来query_posts实在是太强大,参数无数,用法更是无数,如果让我说它的用法,我根本没法一一说清楚.开始之前,你可 ...

  6. web前端零基础入门学习!前端真不难!

    现在互联网发展迅速,前端也成了很重要的岗位之一,许多人都往前端靠拢,可又无能为力,不知所措,首先我们说为什么在编程里,大家都倾向于往前端靠呢?原因很简单,那就是,在程序员的世界里,前端开发是最最简单的 ...

  7. 开始学习NodeJs, javascript, 算法

    我的技术路线是C.C++.C#.PHP,什么都做过,很杂,总想着该怎么继续下去. 最近突然发现了NodeJs,觉得很适合我. 学习环境定在了Ubuntu下,编辑软件选择了WebStorm7. 经过几天 ...

  8. (1)ansible基本配置

    1)ansible安装 yum install epel-release -y yum install ansible -y 2)ansible语法 语法: ansible <host-patt ...

  9. CentOS7下Samba的安装与配置

    一.Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享 ...

  10. idea中使用FindBugs-IDEA插件

    下载 - 安装 - 重启idea即可: 项目右键或者文件右键即可看到  FindBugs 选项. 选择某个选项直接检测即可.检测结果如下图: 这里的Correctness是重点关注对象.这里面的错误往 ...