如何判断我的代码是否已从即时窗口调用



我的代码有什么方法可以区分"我在正常流程上下文中执行"one_answers"我是从调试器的即时窗口执行的"吗?

我有一个公开公共属性的库对象。当使用该库的发布版本,但调试已加载包含该库的DLL的应用程序时,如果我从即时窗口更改属性(x.prop=true),我希望我的属性代码检测到这一点并以不同的方式执行。

有办法检测到这一点吗?

为了方便起见,我还希望在使用该库的调试版本时可以使用此功能。所以,我不能只是检查是否附加了调试器,然后从那里进行分支。

我一直注意到,来自即时窗口的任何调用都至少包含一个源自以下命名空间的调用:

Microsoft.VisualStudio.HostingProcess

所以,如果你有,说:

public static string DumpStack()
{
    return new StackTrace().ToString();
}

你会看到类似于的东西

   at ConsoleApplication1.Program.DumpStack()
   at ConsoleApplication1.Program.Main(String[] args)
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

如果调用来自即时窗口,唯一需要检查的是创建函数的OUTSIDE一个线程。该线程设置布尔值。

通常,即时窗口不能使用其他线程,因为它们被冻结了。意味着,如果你的布尔值doenst发生了变化,那么你就是一个即时窗口。

我希望这是可以理解的。

相关内容

  • 没有找到相关文章

最新更新