如何在Visual Studio中进行调试期间查找WPF / C#中当前预订事件的所有方法

WurzelseppQX

我是WPF的新手,还是C#的新手,现在已经继承了一个C#/ WPF应用程序,包含超过6万行代码(未使用MVVM,设计模式相当简单)。现在,我必须在UI中更改一个很小的东西,但是此控件非常关键,因此紧密地融入了整个解决方案中。我知道Visual Studio中的“实时可视树”功能,也知道实时属性资源管理器。但是,我想使用“ Live EVENT Explorer”之类的东西来查看向此控件的事件注册了哪些方法。我想要一些类似的东西:

a)可以查看当前某个事件(例如ListView的SelectionChanged事件)订阅了哪些方法。我的意思是“当前”,取决于选择了哪些单选按钮和复选框等,订阅的方法正在发生很大变化。因此,我想进行所有需要的选择,然后检查控件并查看哪些方法是订阅了其中一项活动。

b)如果我例如更改控件中的选择,则有可能在此事件触发的第一种方法中立即停止。这样我就可以逐步完成以下所有代码?

你们中有谁知道在Visual Studio中使用内置功能是否可以实现以上任何一种方法,以及如何实现?还是那里有另一个工具可以实现这样的目标?

米奇

在大多数情况下,“查找所有引用”应包含此内容,但是当事件不够独特时(想象Button.Click),此操作将失败。

您可以通过在调试器中浏览到事件对象并检查该_invocationList字段来访问它如果未填充此字段,请查看该_methodPtr字段。如果两个字段都为空,则没有人订阅。

_target是包含订阅方法的对象。如果为null,则将订阅一个静态方法(这会使标识更加棘手)。否则,可以转储目标对象的方法表以找到预订的方法。

在Visual Studio中,调试工具提示使此操作变得容易。对于单播委托,将鼠标悬停在事件上会显示声明类型和方法名称(如果需要,还可以使用Arity):

屏幕截图,显示调试器工具提示

对于多播,_invocationList接管:

屏幕截图,显示调试器工具提示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

.NET Core 2.1:如何在Visual Studio 2017中进行调试期间触发在项目文件中定义的复制任务?

如何在visual studio中调试python

如何使用 Visual Studio 在调用 C++ dll 的 C# 程序中进行调试?

如何在C ++中进行调试

如何更改默认浏览器以在Visual Studio 2017中进行调试?

在Visual Studio中进行调试时,如何查看IDE中的函数调用层次结构/堆栈?

在Visual Studio 2010中进行调试时,如何获取boost :: variant变量的隐藏类型?

在Visual Studio中的循环中进行调试时,如何跳过多个循环?

如何在Android Studio中进行调试?

如何在Visual Studio 2015中进行捆绑和缩小

在 Visual Studio 中进行调试期间忽略通过注册表项链接到 DLL

如何在Visual Studio 2010中从Linux进行远程编译和调试

在Unity(C#)+ Visual Studio Code中进行调试在OS X上可以工作吗?

如何在 Visual Studio 2017 中有效调试?

在没有Pdb文件的Visual Studio中进行调试(C ++ Access Voilation)

如何在Visual Studio Code中调试Lua

如何在Visual Studio Code中调试Karma测试?

如何在Visual Studio中调试独立的javascript?

如何在Visual Studio代码中调试打字稿文件

如何在Visual Studio 2013中调试QFixed

如何在Visual Studio中调试TypeScript单元测试?

如何在 Visual Studio 2017 中调试或跟踪 Angular 绑定?

如何在Visual Studio中调试单个线程?

如何在Visual Studio中调试Powershell模块

如何在Visual Studio 2013中以调试模式关闭ASSERT

如何在Visual Studio 2015 RC中调试JavaScript?

如何在Visual Studio中调试finally块?

如何在Visual Studio 2017中更改调试端口?

如何在Visual Studio 2015中调试Mscorlib.dll