在执行步骤时,Visual Studio调试器会忽略方法

时间:2010-06-23 00:54:06

标签: visual-studio debugging

我看到一些奇怪的行为调试我的C#代码 - 我无法发布我的确切代码但基本上我有一个定义Execute方法的部分抽象基类:

public abstract partial class MyBase
{
    public abstract void Execute();

    protect static object SomeMethod()
    {
        object aaa = OtherClass.GetObject();
        // etc...
    }
}

然后我有另一个实现此方法的部分类,并在基类上调用一些静态方法:

partial abstract class MyParent : MyBase
{
    public void Execute()
    {
        object myobj = SomeMethod();
        // etc...
    }
}

这两个部分类都是使用模式中的xsd.exe生成的部分类的扩展。

我所看到的是,如果我试图进入我的Execute()实现,Visual Stuido调试器会跳过这些方法 - 例如在这种情况下,它将直接进入OtherClass.GetObject()方法。调用堆栈仍显示Execute()OtherClass.GetObject()之间的所有帧,甚至允许我将它们设置为活动帧,但是我无法逐行执行代码,除非我在每一行都设置断点。

  • 这是为什么?
  • 如何修复它以便我可以再次正常调试!?

2 个答案:

答案 0 :(得分:1)

xsd.exe通常使用DebuggerStepThrough属性修饰生成的类,这意味着调试器将......嗯,你得到了图片。

我在过去使用一个简单的.vbs脚本处理过这个问题,我在调用xsd.exe之后调用它(通常作为预构建步骤的一部分):

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.OpenTextFile(WScript.Arguments(0), ForReading)
strText = objFile.ReadAll
objFile.Close

strNewText = Replace(strText, 
    "[System.Diagnostics.DebuggerStepThroughAttribute()]", "")

Set objFile = objFSO.OpenTextFile(WScript.Arguments(0), ForWriting)
objFile.WriteLine strNewText
objFile.Close

您可以使用生成的文件的名称作为参数来调用它,如:

wscript.exe remove_attribute.vbs XsdGeneratedClasses.cs

答案 1 :(得分:1)

另外,请确保Just my Code复选框是unchechedk,以防万一。