[英]How to move the debug pointer to change the execution flow in Visual Studio Code Debugger
[英]How to detect Visual Studio debug execution context from within code?
我正在寻找一种方法来检测在Visual Studio中的调试会话期间如何调用代码。 试图区分这两种情况:
(我这样做是因为我想要在第二种情况下禁用一些非发布线程验证代码。)
任何人都有办法做到这一点,或者有关于追求事物的想法? 我对hacky,tricksy方法很好,即使它们特定于VS的特定版本。
不起作用的事情:
当Visual Studio假定的纯方法(即评估对程序状态没有影响)要么具有副作用,要么具有调试器违反的前提条件时,通常会出现这种情况。
使用以下工具可以最好地解决这些情况:
DebuggerBrowsableAttribute :将此属性应用于属性:
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
get
方法不纯的所有属性,即getter通过设置缓存值或其他方式来改变程序的状态 get
方法具有调试器可能违反的前提条件的所有属性,例如线程限制,跨线程调用(如果使用COM互操作,请不要忘记隐式) DebuggerDisplayAttribute :将此属性应用于其ToString()
实现执行非平凡操作的所有类型(避免调试器性能影响)或具有调试器可能不满足的前提条件(例如,线程要求)。 使用此属性而不是为这些类型调用ToString()
。
DebuggerTypeProxyAttribute :将此属性应用于需要特别考虑调试器中的信息显示时间,内容和方式的类型。 .NET框架本身广泛使用此属性来提供List<T>
和HashMap<T>
类型的清除输出等功能,甚至可以改进Lazy<T>
等类型的可用信息,这些类型有时可以评估,有时也可以可能会影响该计划的状态。
就普通调试而言,我认为这就是你想要的:
System.Diagnostics.Debugger.IsAttached
这是文档 。
但这对观察窗无效。 在这方面,也许 StackTrace
类可以帮助,但我自己没有尝试过。它位于相同的命名空间中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.