Tag: imetadataimport

调试器StepInto自动生成代码和JMC问题

我正在使用MDBG示例制作托管.NET调试器。 目前我正在努力解决StepInto行为,而StepOut和StepOver似乎也有效。 为了实现Just-My-Code步进,我在模块加载时调用SetJMCStatus 。 这很好,允许我调试我的代码。 但由于我将整个模块设置为JMC,因此一些自动生成的代码会起作用并破坏步入。 此类代码的示例可以是自动属性。 由于调试器正在执行Il指令,因此我将逐步进入自动生成的get_propertyName和set_propertyName方法,这些方法被标记为我的代码,因为它们是我的模块的一部分。 为了区分这些自动生成的代码和我的代码,我可以使用调试符号的存在,在自动生成的代码的情况下丢失。 然后我可以简单地将方法标记为不是我的代码,以便在步进期间跳过它。 问题是我不知道在踏入过程中进入内部之前哪些方法是自动生成的。 当我进入一个没有调试符号的方法时,我可以将它标记为不是我的代码,但是为时已晚 – 调试器停在它应该不停止的地方。 从理论上讲,我可以使用IMetadataImport迭代我的模块方法,并在调试器启动时设置它们的JMCStatus,但它似乎相当昂贵: foreach (var methodToken in mdbgModule.Importer.EnumerateAllMethodTokens()) { var func = mdbgModule.GetFunction(methodToken); if (func.SymMethod == null) func.CorFunction.JMCStatus = false; } 如果我只知道接下来要执行什么function,那么我将能够设置它的状态并防止第一次进入自动生成的代码。 我坚持使用MDBG方法进行步进,而不是改变任何东西,只需要调用SetJMCStatus,所以我不确定提供任何代码是否有意义…如果是这样,我会编辑问题,只需添加一条评论! 任何关于主题的建议都非常感谢! 问候,

IMetaDataImport :: ResolveTypeRef方法的问题

我有自己的.NET应用调试器,它使用IMetaDataImport接口 当我调用ResolveTypeRef方法时,我总是得到NotImplementedException 。 ResolveTypeRef的定义如下: [ComImport] [Guid(“….”)] //a valid GUID [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [CLSCompliant(false)] public interface IMetaDataImport { void ResolveTypeRef( [ComAliasName(“mdTypeRef”)] mdToken tr, [ComAliasName(“REFIID”)] ref Guid riid, [ComAliasName(“IUnknown**”), Out, MarshalAs(UnmanagedType.IUnknown)] out object ppIScope, [ComAliasName(“mdTypeDef*”), Out] out mdToken ptd ); // … other methods from IMetaDataImport } 调用方法: metadataImport.ResolveTypeRef(typeRefToken, ref metadataImportGuid, out metadataObject, out typeDefToken) 通常,该方法应解析类型System.Exception或System.SystemException。 当我将应用程序从.NET 3.5移动到.NET 4时出现问题。 […]