日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

COM+對(duì)象池組件崩潰調(diào)試手記

系統(tǒng) 2078 0

COM+ 對(duì)象池組件

崩潰調(diào)試手記

?

文檔版本

版本

創(chuàng)建時(shí)間

創(chuàng)建人

備注

1.0.0.1

2003-7-20

第一稿

?

?

?

?

Implementation Scope

本文檔將說(shuō)明 XMsg II 組件在 COM+ 應(yīng)用中面對(duì)高頻率的并發(fā)調(diào)用發(fā)生了崩潰,崩潰地址在 NTDLL.DLL 內(nèi)。以及調(diào)試的過(guò)程。

?

繼續(xù)閱讀之前,我們假設(shè)您熟悉以下知識(shí):

n ???????? n ???????? Exception Monitor

n ???????? n ???????? 進(jìn)程映像轉(zhuǎn)儲(chǔ)

n ???????? n ???????? W32dasm

?

如果有 Windows XP Symbols ,那么我們也許會(huì)更快找到 NTDLL.DLL 的崩潰函數(shù)。

?

背景知識(shí)

XMsg II 組件是一個(gè) COM+ 對(duì)象池組件,線程模型是 MTA 。當(dāng)它被 COM+ 激活時(shí),它會(huì)先去讀取本地配置 XML 文件,得到相關(guān)的啟動(dòng)參數(shù)。然后,用戶調(diào)用它的接口方法發(fā)送。最后,用戶調(diào)用它的 GetResponse 方法得到 Response XML 文檔。

?

現(xiàn)象

1:

XMsg II 組件的調(diào)用不頻繁的時(shí)候,并沒(méi)有出現(xiàn)崩潰。

2:

我制作了一個(gè) testXMsg.asp 頁(yè)面,模擬服務(wù)器調(diào)用 XMsg.Dll

我制作了一個(gè) Windows Console Application ( TestXMsg.ASP.exe) ,模擬 200 個(gè)線程并發(fā)向發(fā)起 HTTP POST 請(qǐng)求;

XMsg II 組件所在的 COM+ 應(yīng)用 Tomo_X ,會(huì)在所有調(diào)用結(jié)束三分鐘之后,自動(dòng)關(guān)閉 COM+ 應(yīng)用,結(jié)束這個(gè) DLLHOST.EXE 進(jìn)程。

在整個(gè) TestXMsg.ASP.exe 運(yùn)行過(guò)程中,沒(méi)有出現(xiàn)任何崩潰。但是在事隔三分鐘之后,崩潰出現(xiàn)。

跟蹤的困難所在

在反復(fù)測(cè)試 TestXMsg.ASP.exe 的時(shí)候,最大的問(wèn)題重現(xiàn)崩潰必須有以下要素:

n ???????? n ??????? 組件在 COM+ 應(yīng)用中;

n ???????? n ??????? 組件的接口啟用了對(duì)象池;

n ???????? n ??????? 并發(fā)調(diào)用。

?

這樣有以下難點(diǎn):

n ???????? n ??????? 很難用 VC IDE 進(jìn)行跟蹤。其實(shí),單元測(cè)試的時(shí)候,用 BounsChecker 并沒(méi)有查出問(wèn)題,組件實(shí)例釋放的時(shí)候也很順利。

n ???????? n ??????? 很難從 Trace Log 中看到有價(jià)值的信息。幾百個(gè)調(diào)用并發(fā)調(diào)用,而且崩潰是在 NTDLL.DLL 中。

利用 Exception Monitor 確定崩潰源頭

這種進(jìn)入運(yùn)行中的 COM+ 應(yīng)用的調(diào)試,最好的工具就是 Microsoft Exception Monitor 7.0 了。

它可以跟蹤進(jìn)入各種 Windows 服務(wù)運(yùn)行實(shí)例,其中最重要的兩個(gè)服務(wù)是:

t ??????? t ?????? Microsoft Internet Information Service (In Process)

t ??????? t ?????? COM+ Application / MTS Package / IIS (Pooled/Out Of Process)

?

我們選擇監(jiān)視“ COM+ Application / MTS Package / IIS (Pooled/Out Of Process) ”。你會(huì)看到以下對(duì)話框,列出了可供監(jiān)視的所有 COM+ 進(jìn)程外應(yīng)用:

?

?

選擇我們的“ Tomo_UM_X COM+ 應(yīng)用。

在下面的“ Start Monitoring ”對(duì)話框中,點(diǎn)擊“ Run This Monitoring Session ”按鈕:

?

?

這樣,就會(huì)啟動(dòng) WinDBG Debugger Attach Tomo_X 應(yīng)用實(shí)例上。如下圖所示:

?

?

之后,靜靜等待 COM+ 應(yīng)用在三分鐘之后的自動(dòng)關(guān)閉應(yīng)用了。那一刻, WinDBG 屏幕上一陣狂閃,然后消失,只留下了 Exception Monitor 的“ Session Status ”對(duì)話框,如下所示:

?

?

你可以選擇最近的那個(gè)日志,然后點(diǎn)擊“ View Log ”按鈕,如下所示:

?

?

P.T.C

首先,我們來(lái)查看“ P.T.C ”報(bào)告了什么:

***** Activity prior to crash *****

……….

Thread Terminate: ? Process=0, Thread=11, Exit Code=0

Thread Terminate: ? Process=0, Thread=6, Exit Code=0

First chance exception c0000005 (Access Violation) occurred

Thread stopped.

?

它基本上打印出了崩潰之前的 DEBUG OUTPUT 的內(nèi)容。

?

Report

這個(gè)“ Report ”是 Exception Monitor 一個(gè)很強(qiáng)悍的功能,看看它都能告訴我些什么:

***********************************************************

* Exception Monitor Log Analyzer Report version 7.0.0.0

* Report Created from: f:\Program Files\Exception Monitor 7.1\bin\em\logs\OOP_5456-15335-719-2003.dbl

* Report Created on: July 20,2003 at 05:49 PM

* The following fault type was detected: Access Violation

* Exception Monitor 7.1.2195.5

* Log generated on: 2003-7-19 15:04:23

***********************************************************

?

The service faulted in thread # 15

?

The stack for the faulting thread follows. ? Column 1 shows the Child EBP, Column 2 shows the Return Address, Column 3 shows the module called, and column 4 shows the resolved name if column 3 was not able to locate or use symbols. ? To read the stack, start at the bottom and work your way up. ? The function on the bottom called the function above it, which called the function above it, etc.

?

0000000000c6fce4 ? 0000000077f58cca ? ntdll!0x0000000077F83AED (No FPO)

0000000000c6fdb8 ? 0000000077190729 ? ntdll!0x0000000077F58CCA (No FPO) ??

0000000000000001 ? 0000000000000000 ? ole32!0x0000000077190729 (No FPO)

?

*****

The following is extended information from the log:

00c6fcd8 : 00080000

00c6fcdc : 000e78a8

00c6fce0 : 00000000

00c6fce4 : 00c6fdb8

00c6fce8 : 77f58cca : C:\WINDOWS\System32\ntdll.dll+0x8cca

00c6fcec : 00080000

……

!inetdbg.ds c6fd98 to dump next block

?……………..

……………….

…………………..

…………..

?

由于沒(méi)有 Windows XP Symbols Exception Monitor 并不能如愿地告訴你崩潰到底發(fā)生在哪一個(gè)函數(shù),雖然我們知道是 NTDLL.DLL 0x77f83aed 指令。

?

?

W32dasm

NTDLL.DLL 的“ 0x77f83aed ”指令可能是什么方面的函數(shù)調(diào)用呢?

我們用 W32dasm 加載了 NTDLL.DLL ,它會(huì)進(jìn)行 Disassemble ,我們可以看到輸出的函數(shù),如下圖所示:

?

?

從指令地址來(lái)看,“ 0x77f83aed ”指令似乎是 RtlFreeHeap 附近,總之都是涉及釋放堆棧。

?

COM+ 進(jìn)程映像轉(zhuǎn)儲(chǔ)

Windows XP Component Service 提供了一種新功能“進(jìn)程映像轉(zhuǎn)儲(chǔ)”。

進(jìn)程轉(zhuǎn)儲(chǔ)工具概念

通過(guò)將 COM+ 應(yīng)用程序失敗時(shí)的狀態(tài)轉(zhuǎn)儲(chǔ)到指定目錄中,進(jìn)程轉(zhuǎn)儲(chǔ)工具允許管理員簡(jiǎn)化開(kāi)發(fā)人員調(diào)試應(yīng)用程序的任務(wù)。以下是失敗情況的例子:

  • 應(yīng)用程序掛起并不再響應(yīng)客戶端。
  • 應(yīng)用程序?qū)е铝水惓2⒈? COM+ 運(yùn)行時(shí)終止。
  • 應(yīng)用程序失敗。

在所有這些情況中,進(jìn)程轉(zhuǎn)儲(chǔ)功能允許轉(zhuǎn)儲(chǔ)失敗時(shí)的整個(gè)進(jìn)程狀態(tài),啟用更為有效的應(yīng)用程序失敗調(diào)試。

這個(gè)設(shè)置針對(duì)某一個(gè) COM+ 應(yīng)用,如下圖所示:

?

這樣,當(dāng) Tomo_UM_X 應(yīng)用自動(dòng)關(guān)閉時(shí)發(fā)生的崩潰,就會(huì)被 COM+ 把進(jìn)程映像轉(zhuǎn)儲(chǔ)到指定的目錄中,存儲(chǔ)的文件名類似于:

{424102D6-D93F-42D8-98A4-E39ADDD8DD32}_2003_07_20_11_51_02.dmp

?

可以用 Microsoft Visual Studio .NET 打開(kāi)這個(gè)文件,然后“啟動(dòng)新實(shí)例”,就可以重現(xiàn)當(dāng)時(shí)的情景,如下所示:

?

?

Disclaimers

本文檔所包含的信息代表了在發(fā)布之日, zhengyun 對(duì)所討論問(wèn)題的當(dāng)前看法。本文檔不應(yīng)理解為 zhengyun 一方的承諾, zhengyun 不保證所給信息在發(fā)布之日以后的準(zhǔn)確性。

本文檔僅供參考。

用戶必須遵守所有適用的版權(quán)法。在不對(duì)版權(quán)法所規(guī)定的權(quán)利加以限制的情況下,如未得到 zhengyun CSDN.Net 明確的書面許可,不得出于任何目的、以任何形式或手段(電子的、機(jī)械的、影印、錄制等等)復(fù)制、傳播本文的任何部分,也不得將其存儲(chǔ)或引入到檢索系統(tǒng)中。

?

Written by zhengyun (at) tomosoft.com

?

?



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12722


COM+對(duì)象池組件崩潰調(diào)試手記


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 浦东新区| 泸水县| 房山区| 伽师县| 依安县| 行唐县| 隆化县| 东明县| 商河县| 壤塘县| 托里县| 海口市| 香港| 祁门县| 东丽区| 泸西县| 库伦旗| 兴安县| 长子县| 永春县| 丹巴县| 镇原县| 忻州市| 南澳县| 合山市| 江油市| 澄迈县| 十堰市| 新余市| 灵璧县| 连山| 油尖旺区| 榆林市| 西和县| 什邡市| 巩义市| 隆德县| 舒城县| 水城县| 密山市| 大竹县|