Pau*_*ius 7 debugging visual-studio
在Visual Studio中进行调试时,是否可以迭代集合并仅列出过滤的对象信息?我会使用立即窗口,虽然它允许在对象上执行方法,但似乎不允许执行自定义循环语句.
ASP.NET中最简单的例子:
this.Page.Validate();
if (!this.Page.IsValid())
{
// breakpoint here
}
Run Code Online (Sandbox Code Playgroud)
我们如何迭代Page.Validators收集并找到那些无效的+在该断点处输出它们的信息?(这不是主要问题,只是一个样本)
如果不能直接做到这一点,你有解决办法吗?不涉及代码修改的解决方法,只需在立即窗口或某些Watch表达式中编写代码.
"在你的代码中添加一个调试方法,它可以像迭代集合中的所有对象一样.然后你可以在调试模式下从即时窗口调用该方法,它会为你枚举各种各样的东西.把它想象成一个命令-line-debugger-helper.您可以根据需要编写尽可能多的内容."
但它仍然是一种解决方法.我认为它应该是可行的,没有太多的黑客攻击,更重要的是没有修改代码.当然,应该可以在一个语句中进行某种集合转换.
让我们坚持非泛型集合.立即窗口似乎不接受lambda表达式(尝试时出错:"表达式不能包含lambda表达式")
您可以尝试使用立即窗口和LINQ到对象调用.
举例:
pages.Where((x) =>
{
if (x.IsValid)
{
Debugger.Break();
return true;
}
return false;
});
Run Code Online (Sandbox Code Playgroud)
更新:显然,这不起作用,因为立即窗口不允许lambdas.但是,如果将lambda实现为仅调试方法,则可以执行此操作.
[Conditional("DEBUG")]
static bool BreakpointPredicate(YourItemType x)
{
if (x.IsValid)
{
Debugger.Break()
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后只需Where在即时窗口中拨打电话:
pages.Where(BreakPointPredicate);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5721 次 |
| 最近记录: |