2012-05-09 46 views
11

我們試圖使用windbg分析一個w3wp內存轉儲,並且我們發現w3wp進程由於堆棧溢出而崩潰。我加載了psscor4.dll並通過發出!clrstack來獲得調用堆棧。但我也想知道傳遞給方法的參數。 如果我發出「!clrstack -p」或「!clrstack -a」,那麼對於所有參數和局部變量,我們得到<無數據>。 任何想法,爲什麼我們得到<沒有數據>而不是參數和局部變量的實際值?!clrstack -p沒有給出調用堆棧中的方法的參數值

+0

我想我明白了,直到你問這個問題的地步:「任何想法,爲什麼我們要取代參數和局部變量的實際值?」你能改說嗎? –

+0

@dtryon,我現在已經更新了這個問題。感謝您指出。 – arul

回答

9

如果您正在運行發佈版本,您通常無法跟蹤當地人和參數,因爲它們已經過優化並存儲在寄存器中。如果您確實需要它,您可以查看JIT編譯代碼並在寄存器中查找值,但這可能需要大量的記錄。

14

調試優化代碼的樂趣就在這裏。如果你使用!sosex.mdv,你至少會得到你的本地/參數的數據類型。然後,您可以運行!sos.dso或!sosex.mdso以查看堆棧中的對象及其類型。通過這種方式來追蹤論證通常不是非常困難,儘管它並不總是奏效。

相關問題