Как установить точку останова в ссылочном коде в Visual Studio?

Мое основное решение - использовать код из библиотеки служебных классов, который я написал сам, но является частью другого решения. Как установить точку останова в DLL-файле, на который имеется ссылка?


person Dabblernl    schedule 11.04.2010    source источник


Ответы (7)


Щелкните «Отладка», «Новая точка останова», «Прервать функцию» и введите полное имя функции.

person SLaks    schedule 11.04.2010
comment
Я не мог заставить это работать под VS2012, так как он сказал, что не может проверить функцию. Казалось, что можно найти функции внутри решения, но не в ссылочных библиотеках. - person Sam; 08.09.2014
comment
Теперь мне все ясно, но не забудьте включить полное пространство имен функции, исключая круглые скобки. - person Phil Cooper; 05.07.2015
comment
Как это работает, если у меня есть функция с тем же именем в двух отдельных файлах? Когда я набираю имя и нажимаю OK, появляется окно со списком 2 файлов, в которых я мог бы установить точку останова. Хотя оба они определяют метод с введенным мной именем, ни один из них не тот, который я пытаюсь отлаживать. - person sab669; 01.06.2017
comment
Для этого вам понадобится PDB. К счастью, даже если у вас нет PDB, вы можете его сгенерировать. См. stackoverflow.com/a/31286658/67824. - person Ohad Schneider; 07.08.2017
comment
@SLaks не для меня не было. Думаю, этот механизм не идеален: github.com/Microsoft/ApplicationInsights- На главную / вопросы /. - person Ohad Schneider; 08.08.2017
comment
Кто-нибудь знает, как установить точку останова функции для конструкторов класса в ссылочных библиотеках? - person Pratik; 02.08.2019
comment
@pratiksanglikar: IIRC, Namespace.ClassName.ClassName - person SLaks; 05.08.2019
comment
@pratiksanglikar: Попробуйте Ns.ClassName.ctor - person SLaks; 05.08.2019

В Visual Studio вручную откройте исходный файл указанной DLL, содержащий нужный метод, с помощью меню.

Файл> Открыть> Файл ...

Затем установите точку останова, щелкнув левую границу в редакторе кода. Это позволяет вам прерывать любую строку кода, а не только вызовы функций. Visual Studio показывает точку останова в своего рода отключенном состоянии, поскольку считает, что код недоступен. Просто игнорируйте это; точка останова станет активной после выполнения кода и загрузки библиотеки DLL.

Примечание: вы должны ссылаться на отладочную версию вашей сборки, чтобы это работало.

person Olivier Jacot-Descombes    schedule 26.08.2013

Вы можете сделать одно из следующего:

  1. Добавьте проект DLL в решение, содержащее ваш исполняемый файл. Затем вы можете установить точки останова как обычно.
  2. Вместо этого вы можете просто открыть проект DLL и использовать Debug -> Attach to Process, чтобы присоединиться к вашему запущенному EXE.
person Josh    schedule 11.04.2010
comment
(2) Мне легко - просто запустите два экземпляра Studio бок о бок. Ctrl-F5 на «основном», чтобы запустить без подключенного отладчика, а затем присоединиться к процессу с экземпляром студии, которая редактирует проект библиотеки. - person Frep D-Oronge; 12.09.2011
comment
Frep D-Oronge, вы должны добавить это в качестве ответа - это кажется самым простым общим подходом. - person Tim MB; 19.09.2012
comment
@ FrepD-Oronge Хотел бы я прочитать ваш комментарий 2 часа 39 минут назад. Ты жжешь ! Это определенно самое простое решение. - person Nova; 29.03.2017

Я знаю, что это старый вопрос, но он может помочь многим.

Для правильной работы отладчика вам необходимо загрузить базу данных отладочных символов, файл .pdb с тем же именем, что и сборка, которую вы хотите отлаживать. Если это часть созданного вами решения, вы можете просто скопировать и вставить его из папки bin другого решения. Затем добавьте точку останова, указав полный путь к методу, который нужно отлаживать, а также имя сборки, в которой он находится. EX: «MyNamespace.MayClass.MyMethod, MyAssemblyName»

Если вы не владеете кодом, у вас есть 2 варианта, оба включают дизассемблер. Я использую для этого dotPeek, потому что он действительно хорош.

Вариант 1: вы открываете сборку с помощью dotPeek и создаете для нее единственный .pdb, затем копируете его в свою папку .bin и выполняете шаги, описанные выше. https://www.jetbrains.com/decompiler/help/Generating_PDB_Files.html

Вариант 2: используйте dotPeek Symbol Server и PDB Generation. https://www.jetbrains.com/decompiler/help/Symbol_Server_and_PDB_Generation.html После этого следуйте приведенным выше инструкциям, чтобы подключить экземпляр отладчика.

Надеюсь это поможет

person Hellraiser    schedule 08.07.2015
comment
Вау, поколение PDB dotPeek просто потрясающее. - person Ohad Schneider; 07.08.2017
comment
Также есть инструмент, который может получать PDB напрямую с серверов символов (настроен для официального сервера символов MS [msdl .microsoft.com / download / symbols] по умолчанию): github.com/rajkumar -rangaraj / PDB-Загрузчик. - person Ohad Schneider; 07.08.2017
comment
jetbrains.com/decompiler/help/ не работает. - person David Klempfner; 27.11.2020

Убедитесь, что у вас есть файл .pdb в папке bin / debug, где находится dll библиотеки классов, на которую указывает ссылка. Когда вы отлаживаете свое текущее решение, вы должны иметь возможность войти в код из своей библиотеки классов. Когда вы войдете в библиотеку классов, вы сможете установить точки останова.

person Matt Dearing    schedule 11.04.2010

Следуй этим шагам:

  1. Go to Debug
  2. Go to New Breakpoint
  3. Щелкните Function Breakpoint или просто нажмите Ctrl+K, B
  4. появится окно, введите имя функции в следующем формате:

пространство имен.ClassName.FunctionName

Например, предположим, что у вас есть такой код, и я хочу поставить точку останова в начале функции D:

namespace A.B{
    public class C{
          public void D(){
               int x= 10;
          }
    }
}

Итак, в окне Function Breakpoint вам нужно ввести: A.B.C.D

person Vahid Farahmandian    schedule 29.05.2019

Это не мой собственный ответ, это было предложение Фрепа Д-Оронжа в одном из комментариев выше. Это просто и работает без сбоев:

«Мне легко - просто запустите два экземпляра Studio рядом. Ctrl-F5 на« основном », чтобы запустить без подключенного отладчика, затем подключитесь к процессу с экземпляром студии, которая редактирует проект библиотеки»

Все заслуги причитаются ему.

person makoshichi    schedule 08.12.2016