【问题标题】:.NET Profiler - Filter out .Net Framework Functions.NET Profiler - 过滤掉 .Net Framework 函数
【发布时间】:2021-07-12 15:40:45
【问题描述】:

我创建了一个实现ICorProfilerCallback3 接口的.NET Profiling DLL。

我正在使用分析来跟踪运行时调用的函数,但是,我希望跟踪应用程序特定的函数,而不是标准的 .NET 框架函数。

我成功使用了SetEnterLeaveFunctionHook 方法并为其提供了回调函数。

然后,当我在回调函数中时,我使用GetFunctionInfoGetModuleInfo2 函数获取函数信息和程序集信息。

我遇到的问题显然是每个函数都会调用它,我正在寻找一种方法来区分 .Net 框架 DLL 和标准 DLL。

例如,应用程序启动时的大多数调用都转到mscorlib.dll,我对跟踪不感兴趣。

有什么想法或想法吗?我试过调用这个函数,但pdwImplFlags 似乎没有填充任何有用的东西。

https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/metadata/imetadataimport-getmethodprops-method

【问题讨论】:

  • 分析器 API 可能无法以这种方式区分模块。你能对结果进行后处理吗?

标签: c# clr-profiling-api


【解决方案1】:

您可以使用SetFunctionIDMapper2 指定一个映射器,该映射器检查该函数是否感兴趣,如果不是,则在pbHookFunction 中返回false。那么你应该只为你在pbHookFunction中返回true的方法获取回调。

【讨论】:

  • 这是一个有趣的解决方案。欣赏回应。我觉得我仍然会遇到同样的问题。我不确定如何区分我想要的功能和我不想要的功能。我仍然需要一种方法来区分映射器的 .NET 框架函数和非框架函数。
  • 我可能会选择提供给探查器的程序集“白名单”。或者您可以根据装配的位置做出决定。
  • 组件的位置是有意义的。我真的会想到会有某种类型的标志或 API 调用来使它更干净一点。猜不到。
  • 另一个选项是按命名空间排除,例如 System.* 等
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
相关资源
最近更新 更多