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

时间:2010-01-16 21:59:48

标签: c# visual-studio debugging internal

这可能是在黑暗中拍摄的,但是,我如何在PresentationFramework.dll中的以下内部静态方法中设置断点?

System.Windows.Documents.TextEditorTyping._ShowCursor()

我遇到了与Joe非常相似的情况,我正在使用TextBox控件和包含ItemsControl的Popup创建自定义自动完成文本框。当我将焦点放在文本框中并且弹出窗口显示为StaysOpen =“False”,并键入一些字符时,鼠标指针将被隐藏(通过调用System.Windows.Documents.TextEditorTyping.HideCursor我相信)。它通常在鼠标移动时重新显示,但看起来弹出窗口在检查它是否应该隐藏时处理此事件,因此当您在窗口周围移动时,指针会保持隐藏状态。

有一个怪癖,在第一次按键时,指针消失然后立即重新出现,然后在第二次按键时,指针保持隐藏状态。这表明有些东西正在调用_ShowCursor(),我很想知道是什么。因此这篇文章,以及设置上述断点的愿望。如何设置该断点?

关于我的实际问题,指针一旦移动就保持隐藏,我希望通过自己模拟StaysOpen =“False”而不阻止鼠标移动事件来解决它,或者自己解雇鼠标移动事件以使指针重新出现。关于此的任何其他提示表示赞赏。

4 个答案:

答案 0 :(得分:5)

虽然您无法使用库存框架(没有可用的调试符号),但您可以使用Reflector Pro获得此类技巧:http://www.red-gate.com/messageboard/viewforum.php?f=109

Reflector Pro会将WPF程序集反汇编成.cs源文件,并动态生成它自己的调试PDB - 然后通过Presentation Framework程序集单步执行Visual Studio(并设置断点)

祝你好运!

答案 1 :(得分:3)

我不得不建议你在源代码文件中设置断点。它可以从参考源获得,我强烈建议使用Mass Downloader工具来获取它。如果您将它安装到c:\ ReferenceSource,那么您需要的源代码文件将在c:\ ReferenceSource \ dd \ wpf \ src \ FrameWork \ System \ Windows \ Documents \ TextEditorTyping.cs中提供。

参考源优于反编译源的一大优势是它包含源代码注释。并非所有的源代码都可用,但是非常大的WPF块。

John Robbins'install instructions非常好。我遇到的唯一打嗝是由以前使用Microsoft调试符号服务器提供的调试符号引起的。我不得不手动删除符号缓存中也可从参考源获得的.pdb文件。

答案 2 :(得分:2)

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

  1. 从调试选项菜单中禁用“仅我的代码”
  2. 打开断点窗口并在功能
  3. 中选择中断
  4. 如果功能
  5. ,请输入全名

答案 3 :(得分:0)

对于遇到此问题的其他人,我是这样做的(VS2015):

下载并安装了JetBrains dotPeek

将dotPeek作为符号服务器运行

如此处所述:https://www.jetbrains.com/help/decompiler/2016.1/Using_product_as_a_Symbol_Server.html

您可能还必须删除/重命名已下载的错误版本的PresentationFramework.pdb,如上面链接中的“可能的问题和解决方案”中所述