我看到一些奇怪的行为调试我的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()
之间的所有帧,甚至允许我将它们设置为活动帧,但是我无法逐行执行代码,除非我在每一行都设置断点。
答案 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,以防万一。