如何在应用程序中检测“编辑并继续”时刻?

时间:2019-03-27 14:47:17

标签: .net visual-studio clr visual-studio-sdk edit-and-continue

我正在开发.NET应用程序,它可以在屏幕上绘制一些信息。在开发过程中,使用Visual Studio的“编辑并继续”功能非常方便,只需稍作更改即可将代码立即显示在屏幕上。问题是,屏幕重绘应手动触发,而我不知道何时发生“编辑并继续”操作。

我的应用程序实际上是大型第三方系统的插件,初始化(应用程序启动)需要花费一些时间,因此仅停止调试并在每次小的更改后重新启动就太昂贵了。我想以某种方式“捕捉”正在运行的应用程序中更改代码的那一刻,并触发屏幕刷新,以便进行某种“实时刷新”。

“编辑并继续”机制显然可以直接在内存中修补代码,因此监视磁盘上的文件更改无济于事。我什至到目前为止还枚举了进程的内存页面以检测代码段中的更改,但是... CLR进程的内存布局被证明非常复杂(尤其是在调试模式下),因此我找不到有效的解决方案。一个“本机” C ++应用程序可以定期计算内存中代码部分的校验和,但这在.NET应用程序中并不那么简单。在内存中查找更改的代码并不容易,因为CLR生成的x86代码分散在不同的页面上(与“常规”本机进程相反)。

我愿意尽可能地集成某种Visual Studio互操作解决方案,以使用它的API来监视该事件...但是由于我对VS SDK的(有限的)研究无法找到能够给出了...

那么...发生“编辑并继续”时,有什么方法(甚至是“ hackish”)可以在我正在运行的应用程序中进行检测?当Visual Studio注入修改后的代码时,应该发生一些CLR“事件”……或者正在运行的应用程序内存中的其他一些变化(例如)可以被检测到。任何形式的低级操作(例如API挂钩)都是可以接受的,只要它能始终如一地工作即可。

0 个答案:

没有答案