您还可以进行一些基于反射的黑客攻击(例如,Express 版本似乎没有高级断点功能):
void Foo()
{
Foo2();
}
void Foo2()
{
var trace = new StackTrace();
if (trace.GetFrames().Reverse().FirstOrDefault(f => f.GetMethod().Name == "Foo") != null)
Debugger.Break(); // it lives under System.Diagnostics namespace
}
void Test()
{
Foo2(); // doesn't break here
Foo(); // break here
}
并使用您的特定方法:
Foo DBReadRecord()
{
var trace = new StackTrace();
if (trace.GetFrames().Reverse().FirstOrDefault(f => f.GetMethod().Name == "UserButtonDown") != null)
Debugger.Break();
}
请注意,它会极大地影响性能,因此它只是奇怪调试情况的临时解决方案。
另外,请记住,它在Debug配置中效果最好,我不知道在不在 StackTrace 中的方法中可能会发生什么优化,但是当优化打开时可能会发生这种情况。