【问题标题】:How to find custom attributes on an instance with WinDbg如何使用 WinDbg 在实例上查找自定义属性
【发布时间】:2012-12-27 18:14:33
【问题描述】:

使用windbg,有没有办法查看在实例上定义的所有自定义属性? (在课堂上)
如果可能的话,我可以在自定义属性中看到字段值吗?

【问题讨论】:

  • 我能问一下为什么你必须使用windbg而不是dotPeek之类的其他工具吗?
  • @wal 我正在运行时注入自定义属性,因此您在编译的程序集中看不到它。也使用 c# 反射 API 来检查这将不起作用(AFAIK 这是因为某种 MS 错误)
  • using the c# reflection API to check this will not work 出于好奇,我自己尝试了这个:imgur.com/L8snm 你能告诉我这与你所做的有什么不同吗?
  • 在示例中,属性在编译时应用于类型。在我的情况下,代码是在没有属性的情况下编译的。我正在使用 CLR 探查器 API(本机 c++)在运行时发出属性。如果您使用分析器 API 发出新类型并使用反射来查找该类型,也会存在同样的问题。它不会显示类型。我认为这是因为管理反射 API 会查看已编译的元数据。

标签: .net clr windbg sos sosex


【解决方案1】:

其实你可以通过反射看到新发射的属性。您可以使用 IMetaDataEmit::DefineCustomAttribute 像您一样发出新属性,然后通过反射检查它们的存在。我使用该技术来分析我的单元测试并成功检查我的属性是否已发出(在程序集和类型级别)。我猜微软修复了你提到的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2018-07-20
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多