Точки останова в основной среде выполнения .NET?

У меня есть сторонняя библиотека, которая внутренне создает и использует класс SqlConnection. Я могу наследоваться от класса, но у него куча перегрузок, и пока мне не удалось найти нужную. Я хотел бы добавить параметр к используемой строке подключения.

Есть ли способ поставить точку останова в самом ядре библиотеки .NET? В частности, в конструкторах класса SqlConnection, чтобы я мог посмотреть на трассировку стека и увидеть, где он на самом деле строится?

За исключением этого, есть ли другой способ сделать это?

В частности, я хочу добавить параметр Имя приложения, чтобы наше приложение было легче идентифицировать на сервере при просмотре подключений.


Изменить: Похоже, мне нужна дополнительная помощь. Думаю, я включил все, что связано с поддержкой сервера символов, и заметил, что настроенный мной каталог заполнен каталогами, содержащими файлы .pdb. Тем не менее, я не могу сделать доступным фактический источник класса SqlConnection.

Есть ли какое-то определенное руководство о том, как сделать это успешно?


person Lasse V. Karlsen    schedule 14.09.2008    source источник
comment
Если все, что вам нужно, это трассировка стека при использовании определенных методов .NET, вам не нужен исходный код. С этим справится старое доброе окно Breakpoints в Visual Studio. См. этот вопрос и ответ: stackoverflow.com/questions/2192700/   -  person jnm2    schedule 09.09.2013


Ответы (6)


И если вы не можете использовать отладку на уровне исходного кода с исходным кодом .Net framework, предоставленным Microsoft, вы можете попробовать другой отладчик. Например, mdbg или даже windbg.

изменить

Здесь подробно объясняется получение выпущенных частей .Net framework и установка точек останова. NetMassDownloader предоставит вам все (pdb и исходный код) за одну загрузку. Но доступен не весь исходный код .Net framework. Если у вас SqlConnection нет, вы всегда можете использовать отладчики IL, подобные тем, которые я упомянул. И не забудьте про Reflector Лутца, который в любом случае даст вам взглянуть на исходный код.

person Lars Truijens    schedule 14.09.2008
comment
Если все, что вам нужно, это трассировка стека при использовании определенных методов .NET, вам не нужен исходный код. С этим справится старое доброе окно Breakpoints в Visual Studio. См. этот вопрос и ответ: stackoverflow.com/questions/2192700/ - person jnm2; 09.09.2013

Вы можете загрузить исходный код .NET и установить точку останова прямо в исходном коде .NET FW.

Вы можете использовать NetMassDownloader для быстрого получения исходников .NET.

person aku    schedule 14.09.2008

В соответствии с этой статьей вы можете загрузить исходный код для .NET Framework, а затем отлаживать его с помощью Visual Studio:

http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx

person Espo    schedule 14.09.2008
comment
Хе! На этот раз я обогнал тебя 8-) - person aku; 14.09.2008
comment
Проклятие. 2 раза по 5 минут :) . Каковы наилучшие практики в таких вещах, должен ли я удалить свой ответ? - person Espo; 14.09.2008
comment
Мне сегодня просто до смерти скучно. ТАК большое удовольствие! - person aku; 14.09.2008
comment
Тогда я оставлю свой ответ. Хотя у нас обоих был один и тот же ответ, у меня есть другая ссылка, которая когда-нибудь может кому-то помочь. - person Espo; 14.09.2008

Чуть не забыл упомянуть Deblector — это подключаемый модуль Reflector, который позволяет отлаживать практически любое приложение .net. без исходников :)

person aku    schedule 14.09.2008

Хотя отладка исходного кода определенно лучше, вам не нужны pdbs или исходный код для отладчика VS, чтобы установить bp для нужной вам функции.

Убедитесь, что вы зашли в Tools/Options/Debugger и отключили опцию «Just My Code». Поскольку фреймворк не является «вашим кодом», отладчик бесполезно мешает вам устанавливать там точки останова.

Далее вам нужно полное имя метода, как оно указано в метаданных. Это включает в себя любые пространства имен, в которые он вложен. Я бы рекомендовал ILDasm или Reflector, если вам нужно найти имя.

В окне точек останова в верхнем левом углу есть кнопка меню "новый бп". Один из вариантов — установить bp на имя функции. Когда появится диалоговое окно, снимите флажок, чтобы intellisense проверял имя, поскольку у вас нет проекта. Надеюсь, это поможет.

person Steve Steiner    schedule 14.09.2008
comment
Как добавить точку останова в конструктор SqlConnection, который принимает строку? Я пробовал: System.Data.SqlClient.SqlConnection.ctor(string) System.Data.SqlClient.SqlConnection.ctor(string connectionString)... и то же самое с SqlConnection вместо ctor. - person Lasse V. Karlsen; 15.09.2008

Хорошо, если вам нужно подробное руководство, вот оно:

Настройка Visual Studio для отладки исходного кода .NET Framework

Если вам нужна помощь, расскажите, какие шаги вы выполнили?

person aku    schedule 14.09.2008