2010-09-25 47 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修复?在这种情况下,我建议你做代码审查,而不是黑魔法。