我试图在运行时动态重写IL代码。虽然使用Profiling API对.NET框架应用程序进行了详细记录,但我无法找到与UWP应用程序类似的内容。
因为我有一套自动化功能测试,所以我需要设置性能分析环境并以编程方式启动示例应用程序。
This question解释了如何启用调试器(据我所知,探查器本质上是一个调试器)并以编程方式启动UWP应用程序。
因此,在我的引导程序中,我调用IPackageDebugSettings::EnableDebugging
,然后调用IApplicationActivationManager::ActivateApplication
。
无论如何,我无法弄清楚如何实现调试器。使用以下参数调用调试器(可执行文件):
-p 3836 -tid 6180
每次运行都会改变两个数字。虽然p
似乎是调试过程的进程ID,但我不知道tid
可能是什么,或者我如何使用参数来控制已调试的应用程序(注册模块加载事件,触发器) rejits等。)。
我在Core CLR repo上找到了this issue,它是关于为Core CLR应用程序启用Profiling API的。该问题包含link到示例分析器仓库。
对于Core CLR应用程序的分析似乎基本上与.NET框架应用程序中的相同(具有一些限制)。在我的引导程序中,我尝试设置适当的环境变量(即CORECLR_ENABLE_PROFILING
,CORECLR_PROFILER
和CORECLR_PROFILER_PATH
),然后设置IApplicationActivationManager::ActivateApplication
。
但是,分析器无法附加。
我非常确定通常可以对UWP应用程序进行分析,因为JetBrains' dotTrace可以做到。
有什么想法吗?