我正在寻找一种方法来阻止Visual Studio调试器在按下F11时进入某些类和函数。或阻止某些文件,以便IDE不会打开它们,只是步骤低(除非出现异常)。
我知道这听起来有点愚蠢,但是我使用智能指针和其他辅助类,许多重载运算符,简单表达式由许多函数调用组成,它们在优化时消失,所以它不是速度问题,而是它是一个调试问题,一直打开和关闭许多文件,经历许多功能,意外地离开目标代码等等。
以下是我正在谈论的一个例子:
stepToThisFunction(objectOfIgnoreClass->ignoreFunction());
当调试器在此行时,按F11应仅输入stepToThisFunction
,逐步执行ignoreFunction()
或可能来自objectOfIgnoreClass
的任何函数调用。
托管DebuggerStepThrough
的一些原生等价物。我不想使用CLI。只是在函数/类之前写的关键字或宏。我也找到了一些东西,一些注册表键修改,但这似乎不是我正在寻找的东西,或者我不理解它的机制(我甚至不理解注册表键与此有什么关系) 。此外,“放置断点”和“运行到光标”是不被接受的解决方案。
答案 0 :(得分:6)
我有一个宏来做到这一点。它不是很快,但它非常有用(实际上我也将它转换为C#所以我可以在AddIn中使用它,这要快得多)。只需使用您要忽略的函数自定义正则表达式并绑定到F11或您选择的其他键:
Sub StepIntoNextRealFunction()
DTE.Debugger.StepInto(True)
Dim frame As EnvDTE.StackFrame = DTE.Debugger.CurrentStackFrame
Dim fn As String = frame.FunctionName
Dim skipRE As Regex = New Regex("operator.*->|MyString::MyString|operator new|operator.*\*|ignoreFunction")
If (skipRE.Match(fn).Success) Then
DTE.Debugger.StepOut(True)
DTE.Debugger.StepInto(True)
End If
End Sub
编辑:这是一个C#版本 - 你需要创建一个插件,然后连接到DTE对象:
public void StepIntoNextRealFunction(DTE2 dte)
{
Debugger2 debugger=(Debugger2)dte.Debugger;
debugger.StepInto(true);
while (true) {
EnvDTE.StackFrame frame = debugger.CurrentStackFrame;
string fn = frame.FunctionName;
Regex skipRE = new Regex("operator.*->|basic_string.*basic_string");
if ((skipRE.Match(fn).Success)) {
debugger.StepOut(true);
debugger.StepInto(true);
} else {
break;
}
}
}
答案 1 :(得分:3)
右键单击该行并选择“Step into specific”。然后选择你想要的功能。
答案 2 :(得分:3)
Visual Studio中有一项不受支持的功能,允许您永久配置调试器,而不是单步执行某些功能。有关详细信息,请参阅此MSDN博客文章:
http://blogs.msdn.com/b/andypennell/archive/2004/02/06/69004.aspx