2010-09-25 46 views
2

請原諒我如果這是一個愚蠢的問題。在應用程序(比如控制檯應用程序)運行時,是否可以通過編程方式「觀察」堆棧和堆的內容?有沒有API可以做到這一點?在應用程序中觀察堆棧和堆上的對象的值類型

+0

假設存在以下情況:執行觀察的代碼本身將使用堆棧和進程的堆,從而更改結果。你想要的是*調試器*或者*內存分析器*,或者兩者兼而有之。然後,您可以從流程外部*看看發生了什麼。以編程方式執行此操作:編寫一個調試器。 – 2010-09-25 14:10:40

回答

2

那麼,你可以嘗試使用CLR Debugger API - 雖然我不確定你是否可以在同一個過程中使用它。但是,我認爲可能有更好的解決方案......你究竟在做什麼?這裏的大圖是什麼?

+0

純粹從學習的角度來看。我認爲每次應用程序(不同的應用程序,如您所提到的)新增一個對象時,看到一個計數器(在我的用戶界面上)在「堆」上增加會很有趣。更新: - 我想我應該從上面提到的鏈接中查看以下內容: - 「可以檢查線程以檢查其調用堆棧。線程的調用堆棧分爲兩級:鏈級和堆棧調用堆棧首先被分解成鏈,鏈是一個連續的邏輯調用堆棧段...「 – 2010-09-25 08:34:06

+0

@ydobonmai:我會在單個應用程序中將它作爲一個事件掛鉤。除非你真的需要,否則我不會開始嘗試進入調試器API。 – 2010-09-25 08:36:37

+0

「我會在單個應用程序中將它作爲一個事件掛鉤」。你在談論哪個「事件」?你的意思是你會在每個對象的構造函數中增加一個計數器,或者我完全錯誤了。你能舉個例子嗎? – 2010-09-25 08:40:20

0

我不知道雖然一些非託管代碼可以輕鬆跟蹤堆棧,但跟蹤堆需要考慮GC,因爲指針可以在每個GC之後移動。

現在,因爲唯一可以更改變量的應用程序就是您的控制檯應用程序(!),所以您爲什麼要這樣做?當然你只會跟蹤你在應用程序中自己正在做什麼。它是否存在bug修復?在這種情況下,我建議你做代碼審查,而不是黑魔法。