请原谅我如果这是一个愚蠢的问题。在应用程序(比如控制台应用程序)运行时,是否可以通过编程方式“观察”堆栈和堆的内容?有没有API可以做到这一点?在应用程序中观察堆栈和堆上的对象的值类型
回答
那么,你可以尝试使用CLR Debugger API - 虽然我不确定你是否可以在同一个过程中使用它。但是,我认为可能有更好的解决方案......你究竟在做什么?这里的大图是什么?
纯粹从学习的角度来看。我认为每次应用程序(不同的应用程序,如您所提到的)新增一个对象时,看到一个计数器(在我的用户界面上)在“堆”上增加会很有趣。更新: - 我想我应该从上面提到的链接中查看以下内容: - “可以检查线程以检查其调用堆栈。线程的调用堆栈分为两级:链级和堆栈调用堆栈首先被分解成链,链是一个连续的逻辑调用堆栈段...“ – 2010-09-25 08:34:06
@ydobonmai:我会在单个应用程序中将它作为一个事件挂钩。除非你真的需要,否则我不会开始尝试进入调试器API。 – 2010-09-25 08:36:37
“我会在单个应用程序中将它作为一个事件挂钩”。你在谈论哪个“事件”?你的意思是你会在每个对象的构造函数中增加一个计数器,或者我完全错误了。你能举个例子吗? – 2010-09-25 08:40:20
我不知道虽然一些非托管代码可以轻松跟踪堆栈,但跟踪堆需要考虑GC,因为指针可以在每个GC之后移动。
现在,因为唯一可以更改变量的应用程序就是您的控制台应用程序(!),所以您为什么要这样做?当然你只会跟踪你在应用程序中自己正在做什么。它是否存在bug修复?在这种情况下,我建议你做代码审查,而不是黑魔法。
- 1. 可观察堆栈和队列
- 2. 堆栈或堆上的对象分配
- 3. 堆栈/堆上的对象创建?
- 4. 对象的堆栈上或堆栈上的隐藏成员?
- 5. 堆栈的大小和值类型
- 6. 看到应用程序线程使用的堆栈和堆量
- 7. enable_shared_from_this和堆栈上的对象
- 8. 角4 MEAN堆栈可观察
- 9. 堆栈中的对象vs C++堆中的对象
- 10. 堆栈应该如何使用大对象堆栈?
- 11. Python是否有静态对象,堆栈对象和堆对象?
- 12. 在堆和堆栈上创建混合矢量对象
- 13. 内核堆栈与用户模式应用程序堆栈
- 14. 如何在C#.Net中查看堆栈和堆栈中的对象
- 15. 线程堆和堆栈
- 16. 堆/堆栈上的类成员分配?
- 17. 计数在堆栈和堆中为许多类创建的对象
- 18. 堆栈上的对象意外删除
- 19. RxJs堆栈观测
- 20. 调用堆栈上的异常处理堆栈帧的顺序
- 21. C++在将堆栈或堆栈中的类对象推入容器时创建类对象?
- 22. Java和不同类型的堆栈
- 23. 如何使用各种类型的对象填充堆栈
- 24. Python中小型Web应用程序的堆栈建议
- 25. JVM - 堆栈和堆栈
- 26. 堆栈上的值损坏
- 27. 在函数中创建的对象,是保存在堆栈还是堆上?
- 28. 堆栈的顶部应该在堆栈的链表中实现?
- 29. Haskell中的一般'无类型'堆栈
- 30. Android应用程序堆栈视图
假设存在以下情况:执行观察的代码本身将使用堆栈和进程的堆,从而更改结果。你想要的是*调试器*或者*内存分析器*,或者两者兼而有之。然后,您可以从流程外部*看看发生了什么。以编程方式执行此操作:编写一个调试器。 – 2010-09-25 14:10:40