成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面向.Net程序員的dump分析

開發 后端
在Windows系統上,dump文件分為內核 dump 和用戶態 dump 兩種。前者一般用來分析內核相關的問題,比如驅動程序;后者一般用來分析用戶態程序的問題。正文分3節 抓取dump以及dump的手動和自動分析。對于初學者自動分析dump是很方便的一種渠道。

背景

Dump文件是進程的內存鏡像。可以把程序的執行狀態通過調試器保存到dump文件中。在 Windows 系統上, dump 文件分為內核 dump 和用戶態 dump 兩種。前者一般用來分析內核相關的問題,比如驅動程序;后者一般用來分析用戶態程序的問題。

一般的程序員可能接觸不到dump文件,反而是運維會用的多一些。不過如果你抗戰在***線,學會dump的分析無疑是掌握一柄利器。因為很多場景下,在線下的單元測試或者性能測試中由于測試用例的不充分或者生產與測試環境的硬件以及pv量級的不同等等情況導致問題暴露不出,而在生產環境中又沒有足夠的日志或者堆棧信息來指向問題產生的原因。這個時候dump文件的分析就顯得很有作用。

正文分3節 抓取dump以及dump的手動和自動分析。對于初學者自動分析dump是很方便的一種渠道。


一. 抓取dump

1. 最簡單的方法 通過任務管理器

2. 通過debugdiag

debugdiag是一個微軟提供的dump抓取和分析工具。可以建立各種規則在不同的條件下抓取dump,同時具有強大的dump分析功能。

下載地址:http://www.microsoft.com/en-us/download/details.aspx?id=26798

3. Adplus方式

運行 cmd ,進入 adplus.exe 文件所在目錄,運行如下命令:

單個進程: adplus .exe – hang – p <PID> – o d: ¥

多個進程: adplus .exe – hang – p <PID1> -p <PID2> – o d: ¥

Mini Dump : adplus .exe - MiniOnSecond – hang – p <PID> – o d: ¥ 

抓取方式的選擇:

任務管理器的抓取適合dump文件不大,對應系統盤默認存放路徑的空間完全足夠的情況。

debugdiag的抓取可以適應多種情況,通過工具的配置來完成。

Adplus解決了任務管理器抓取方式的限制,可以處理對應多個進程大文件的情況。

#p#

 

 二. dump的手動分析

工具: winbdg

WinDBG不是專門用于調試.Net程序的工具,它更偏向于底層,可用于內核和驅動調試。進行普通的.Net程序調試還是使用微軟專為.Net開發的調試工具MDBG更方便一些。但是WinDBG能看到更多的底層信息,對于某些特別疑難的問題調試有所幫助,例如內存泄漏等問題。

測試代碼下載 : MyDumpTest.7z

首先添加設定符號文件路徑(Symbol Path),當你使用Visual Studio編譯程序時,是否有留意到在bin/Debug文件夾下會有.pdb后綴的文件?這些文件包含有dll程序集的調試符號,pdb文件并不包含有執行代碼,只是使調試工具能把代碼執行指令翻譯為正確的可識別字符。微軟提供了包含大量pdb文件的公共服務器,地址如下:http://msdl.microsoft.com/download/symbols。打開windbg程序,選擇“File->Symbol File Path…“,把下面的內容復制進去保存。srv*d:\debug\symbols*http://msdl.microsoft.com/download/symbols。

下面這行命令 如果你發現出現Unable to verify checksum...或者的消息 那是因為你沒有添加.net的sos擴展或者sos的版本沒有對應上。.Net1.1時代的SOS擴展已經自帶于下載安裝的WinDBG中,從.Net2.0以后,SOS擴展已經自帶到.Net框架中:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SOS.dll,為了不至于引起混淆,***的方法就是使用前面的loadby調試器元命令來讓WinDBG自己決定加載什么版本的SOS。

添加sos:.load C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\sos.dll。

加載SOS后,使用命令.chain來查看調試鏈中是否已經成功包含SOS擴展。

通過!eeversion查看sos的版本號。

實戰命令: ~ 查看線程

這表明當前dump里記錄的線程數。如果要切換線程,用波浪線+序號+s來切換,如切換到線程2,那么用~2s即可。

lm 查看你加載的模塊

kb 查看native code調用棧

用~現在只有線程信息,對于每個線程,在被抓的那一刻,在執行什么,我們有命令:kb。

看到clr大家應該很眼熟吧。這里已經可以看到較詳細的調試信息了。

!runaway    (查看線程對應 CPU 運行時間)

因為我們的測試程序是測試的是線程阻塞所以我們選一個運行時間為0的,例如415

!dso 查看這個堆棧中的對象

!clrstack 查看這個線程的托管代碼調用棧

通過上面我們已經可以看出這個線程一直都是處于阻塞狀態。

到這里基本上一個小的測試程序可以告一段落了,當然windbg的功能遠遠不止如此,這里分享一些資源給大家。

資源下載 : WinDbg入門.rar  Windbg用法詳解.7z

 

#p#

 三. dump的自動分析

1. debugdiag

這里有幾種規則類型的選擇,一般我們常用的用crash來查看鎖和堵塞的情況,performance來檢查性能的問題。

選擇完成后直接點擊開始分析

生成報表

查看描述

點擊詳細

這樣,紅色字體就是問題的所在。然后根據具體問題下發到對應開發部門解決。

2. Hang自動化分析

在WinDbg輸入如下命令

.shell -ci "~* kb;.echo MANAGED THREADS;!threads;.echo MANAGED CALLSTACKS;~* e !clrstack;" D:\xx.exe


本篇先到此 希望對大家有幫助

本文來自:http://www.cnblogs.com/dubing/p/3878591.html

責任編輯:林師授 來源: 熬夜的蟲子個人博客
相關推薦

2009-02-13 09:45:27

程序員JavaPHP

2013-08-20 09:33:59

程序員

2010-12-30 10:04:49

Linux入門

2010-12-13 14:37:36

.NET開發

2011-03-10 13:45:24

VB.NET

2011-05-13 14:34:02

程序員

2011-12-20 09:01:25

.NET

2009-07-27 18:07:30

ASP.NET程序員

2009-07-24 13:09:57

ASP.NET程序員

2012-11-22 14:00:26

程序員

2017-11-14 21:30:15

2016-11-04 10:30:17

微信小程序

2024-06-04 12:32:42

.NET開發內存泄漏

2015-03-19 14:53:17

面向對象程序員新手程序員

2013-08-16 11:26:24

程序員面向對象

2012-03-06 09:22:46

程序員

2009-07-21 10:16:51

ASP.NET程序員

2010-10-09 09:20:08

.NET

2009-08-04 15:39:15

ASP.NET程序員

2015-07-08 10:15:30

程序員對象不解風情
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频一二三区 | 亚洲欧美日韩在线 | 夜夜精品浪潮av一区二区三区 | 一级a毛片 | 91视视频在线观看入口直接观看 | aaaa日韩| 欧美一区2区三区4区公司 | 日韩欧美一区在线 | www.47久久青青| 中文字幕中文字幕 | 精品欧美一区二区三区精品久久 | 操久久 | av毛片在线播放 | 日韩中文字幕网 | 97avcc| 亚洲永久字幕 | 91欧美精品成人综合在线观看 | 国产清纯白嫩初高生在线播放视频 | 久久国产一区二区三区 | 日韩一区二区在线观看视频 | 国产精品精品 | 天堂成人国产精品一区 | 网站国产 | 欧美亚洲综合久久 | 日韩一区二区三区视频 | 成人h电影在线观看 | h视频免费在线观看 | 欧美视频福利 | 最近日韩中文字幕 | 国产日韩欧美 | 老牛嫩草一区二区三区av | 久久久久久久一区 | 99精品欧美一区二区三区 | 亚洲成人精品一区二区 | 国产一区| 超碰人人艹 | 国产美女自拍视频 | 日日操日日舔 | 日韩精品999 | 嫩草最新网址 | 一区在线播放 |