Как установить точку останова внутри C # PresentationFramework.dll? - PullRequest
5 голосов
/ 17 января 2010

Это может быть выстрел в темноте, но как мне установить точку останова внутри следующего внутреннего статического метода в PresentationFramework.dll?

System.Windows.Documents.TextEditorTyping._ShowCursor()

Я столкнулся с ситуацией, очень похожей на Джо , где я делаю настраиваемое текстовое поле для автозаполнения, используя элемент управления TextBox и всплывающее окно, которое содержит ItemsControl. Когда у меня есть фокус в текстовом поле и всплывающее окно, отображаемое с помощью StaysOpen = "False", и вводим некоторые символы, указатель мыши скрыт (я полагаю, что через вызов System.Windows.Documents.TextEditorTyping.HideCursor). Обычно он отображается повторно при перемещении мыши, однако кажется, что всплывающее окно обрабатывает это событие, в то время как оно проверяет, должно ли оно скрываться или нет, поэтому указатель остается скрытым при перемещении его по окну.

Существует странность, при которой при первом нажатии клавиши указатель исчезает, затем мгновенно появляется снова, затем при нажатии второй клавиши указатель остается скрытым. Это говорит о том, что что-то вызывает _ShowCursor (), и мне интересно знать, что. Отсюда и этот пост, а также желание установить точку останова, описанную выше. Как мне установить эту точку останова?

Что касается моей действительной проблемы, указатель остается скрытым после его перемещения, я надеюсь решить его либо путем эмуляции StaysOpen = "False" самостоятельно, не блокируя события перемещения мыши, либо самостоятельно запуская события перемещения мыши, чтобы вызвать повторное появление указателя. Любые другие советы по этому поводу приветствуются.

Ответы [ 4 ]

5 голосов
/ 17 января 2010

Хотя вы не можете сделать это со стандартной структурой (нет доступных символов отладки), вы можете получить такую ​​хитрость, работая с Reflector Pro: http://www.red -gate.com / messageboard / viewforum.php? F = 109

Reflector Pro будет разбирать сборки WPF на исходные файлы .cs и генерировать свою собственную отладочную PDB на лету - затем вы выполните один шаг с Visual Studio через сборку Presentation Framework (и установите точки останова)

удачи!

3 голосов
/ 17 января 2010

Я должен порекомендовать вам установить точку останова в файле исходного кода. Он доступен из справочного источника, я очень рекомендую инструмент Mass Downloader , чтобы получить его. Если вы установили его в c: \ ReferenceSource, то нужный вам файл исходного кода будет доступен по адресу c: \ ReferenceSource \ dd \ wpf \ src \ FrameWork \ System \ Windows \ Documents \ TextEditorTyping.cs.

Одним из значительных преимуществ ссылочного источника перед декомпилированным является то, что он содержит комментарии исходного кода. Не весь исходный код доступен, но очень большие куски WPF.

Инструкции по установке Джона Роббинса очень хороши. Единственный сбой, который у меня возник, был вызван тем, что ранее я использовал символы отладки, доступные с сервера отладочных символов Microsoft. Мне пришлось вручную удалить файлы .pdb, которые также доступны из справочного источника, из кэша символов.

2 голосов
/ 17 января 2010

Это может быть немного сложно, но это можно сделать в следующих шагах.

  1. Отключить «просто мой код» в меню параметров отладки
  2. Открыть окно точек останова и выбрать разрыв в функции
  3. Введите полное имя, если функция
0 голосов
/ 30 октября 2016

Для других, которые сталкиваются с этой проблемой, вот как я это сделал (VS2015):

Скачал и установил JetBrains dotPeek

запустите dotPeek в качестве сервера символов

Как объяснено здесь: https://www.jetbrains.com/help/decompiler/2016.1/Using_product_as_a_Symbol_Server.html

вам, вероятно, также придется удалить / переименовать уже загруженную неправильную версию PresentationFramework.pdb, как описано в разделе «Возможные проблемы и решения» в приведенной выше ссылке

...