Roslyn: Учитывая исходное местоположение / линию, как выяснить, можно ли и где установить точку останова
Я работаю над редактором кода, используя Roslyn и, для отладки, MDbg.
В редакторе я стремлюсь к визуальному студийному поведению для установки точек останова. То есть пользователь может нажать на строку, и мне нужно будет выяснить,
- Это исходное местоположение, в котором я могу установить точку останова?
- если это так, в какой строке должна быть установлена точка останова?
Например, предполагая, что у пользователя есть такой документ:
line 01: using System;
line 02:
line 03: public class SomeClass
line 04: {
line 05: public string someMethod()
line 06: {
line 07: return @"
line 08: abcdefg
line 09: ";
line 10: }
line 11: }
При нажатии на строку 1 ничего не должно происходить - невозможно установить точку останова для оператора using.
При щелчке по строке 3 он должен установить точку останова в строке 4 (не может установить точку останова в самом определении метода, а скорее в маркере начальной скобки, где начинается выполнение метода).
При щелчке на строке 7, 8 или 9 он должен установить точку останова на строке 7, поскольку это всего лишь одно утверждение.
Если честно, на данный момент у меня даже нет идей, как к этому подойти вообще. У кого-нибудь есть указания, как подходить к этому концептуально? Я надеялся, что у Roslyn есть несколько полезных вспомогательных методов, но я не нашел много в его источнике, связанном с точками останова
Просто повторюсь, основной вопрос, я думаю, сводится к выяснению
- определенная строка в коде - это место, в котором я могу установить точку останова?
- если это так, в какой строке должна быть установлена точка останова?
Спасибо!
1 ответ
Как указано в комментарии, это именно то, что вам нужно: http://source.roslyn.io/#Microsoft.VisualStudio.LanguageServices.CSharp/Debugging/CSharpBreakpointResolutionService.cs,6a9951745157788a