如何在C# PresentationFramework.dll中设置断点?

5

这可能是一次无从下手的尝试,但是,我该如何在 PresentationFramework.dll 中的以下内部静态方法中设置断点?

System.Windows.Documents.TextEditorTyping._ShowCursor()

我遇到了与Joe非常相似的情况,我正在使用TextBox控件和包含ItemsControl的Popup制作自定义自动完成文本框。当焦点在文本框中且弹出窗口显示为StaysOpen="False"时,输入一些字符后,鼠标指针会被隐藏(通过调用System.Windows.Documents.TextEditorTyping.HideCursor)。通常情况下,鼠标移动时会重新显示,但是似乎弹出窗口在检查是否应该隐藏时处理了此事件,因此当您在窗口中移动它时,指针仍然保持隐藏。
有一个怪癖,在第一次按键时,指针会消失然后立即重新出现,然后在第二次按键时,指针会保持隐藏。这表明某些东西正在调用_ShowCursor(),我很想知道是什么。因此发布了这篇文章,并希望设置上面描述的断点。如何设置该断点?
关于我的实际问题,指针一旦移动就保持隐藏,我希望通过模拟自己的StaysOpen="False"而不阻止鼠标移动事件来解决它,或者通过自己触发鼠标移动事件来使指针重新出现。对此的任何其他提示都将不胜感激。
4个回答

5
虽然使用原始框架无法实现此功能(没有可用的调试符号),但您可以通过 Reflector Pro 实现这种技巧:http://www.red-gate.com/messageboard/viewforum.php?f=109
Reflector Pro 将把 WPF 组件反汇编成 .cs 源文件,并即时生成自己的调试 PDB。然后,您可以在 Visual Studio 中逐步执行 Presentation Framework 组件(并设置断点)。
祝好运!

4
微软的调试符号服务器提供可用的调试符号。更好的是,源代码也可获得。 - Hans Passant

3
我建议您在源代码文件中设置断点。您可以从参考源中获取此功能,我非常强烈推荐使用 Mass Downloader 工具 (下载链接) 获取它。如果您将其安装到 c:\ReferenceSource,则所需的源代码文件将位于 c:\ReferenceSource\dd\wpf\src\FrameWork\System\Windows\Documents\TextEditorTyping.cs。
与反编译源相比,参考源的一个巨大优势是它包含源代码注释。虽然并非所有源代码都可用,但 WPF 的大部分代码块都可用。
John Robbins 的安装说明非常好。唯一的问题是我之前曾经使用过来自 Microsoft 调试符号服务器的调试符号,因此必须手动从符号缓存中删除也可从参考源中获取的 .pdb 文件。

WPF的程序集是否是共享源代码发行版的一部分? - x0n
共享源代码是另一种动物,其中没有WPF。WPF源代码是参考源代码的一部分。 - Hans Passant

2

这可能有点棘手,但可以按照以下步骤完成。

  1. 从调试选项菜单中禁用“仅限我的代码”
  2. 打开断点窗口并选择函数中断
  3. 键入函数的完整名称

不起作用。当我在代码中输入函数时,它会显示类似的函数名称,并询问我想要哪一个。但是例如,当我输入“Add”并等待它要求我输入类似于“List.Add”的内容时,它会说找不到该函数。 - Hi-Angel

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接