Visual Studio 2010 плагин для отладки DLL

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 21 Jun 2012.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,224
    Reputations:
    455
    И так хотелось представить вам одну свою небольшую разработку. Маленькую но полезную.

    Суть проблемы:
    Как многие знают, отладка DLL намного сложнее чем отладка обычной программы. Не буду пояснять про отладку обычных DLL т.к. это не вызывает больших затруднений.

    Наиболее сложно отлаживать DLL которые должны работать обязательно в контексте определенного процесса.
    Пример: DLL которая внедряется в IE или FF и чтото там хукает. В общем должны понять о чем это я.

    И вот наступает жопа: DLL есть, исходник есть, а как заставить её подгрузиться в нужный процесс и там отладить - это уже загадка. И тут может начаться долгий и нудный квест. Да и сам процесс отладки довольно муторный.

    Кто не знает, то вот как это делается:
    1) Запускается нужный процесс
    2) В отладчике VS делается аттач к этому процессу
    3) Берется сторонняя программа которая по указанному PID'у процесса внедрит в него вашу DLL.
    И так постоянно надо при каждом отладочном запуске.

    Именно из-за этого многие ненавидели отлаживать такие DLL.


    Решение проблемы:
    Предлагаю вам довольно простое и удобное решение проблемы: Плагин для VS 2010 который сделает за вас всю работу.
    Принцип работы:
    1) Запускается указанный процесс
    2) Аттачится к нему отладчик
    3) В запущенный процесс внедряются данные для загрузки DLL
    4) Запускается код загрузки DLL

    Пример работы:
    1) Открываем проект DLL
    2) Компилим, главное чтобы была отладочная инфа.
    3) Ставим точку остановки в нужном месте DLL
    4) в Меню Сервис (tools) выбираем пункт DLL Inject And Debug
    5) В открывшемся окне выбираем/вписываем/открываем программу в контексте которой надо отладить DLL. Также указываем путь к вашей(откомпиленной) DLL
    6) Нажимаем кнопку "Start"
    7) C радостью отлаживаем свою DLL
    8) Когда уже не надо отлаживать, закрываем запущенный процесс и останавливаем отладку

    Постоянно выбирать программу и DLL не надо, т.к. данные не стираются.

    Системные требования и ограничения:
    1) Поддерживается только Visual Studio 2010 (Prof / Team / Ultimate). Express версии скорее всего не поддерживаются
    2) Отлаживать так можно только 32-х битные DLL с машинным кодом (т.е. CRL не прокатит)
    3) Отлаживать можно только в одном процессе, причем в том, который был указан и запущен.
    4) Внедрение DLL происходит уже после старта процесса. Но этого всё равно достаточно для многих вещей.
    5) Поддержку VS 2005/2008 можно обеспечить только правкой исходников и созданием надстройки. Но эти версии неактуальны уже.
    6) Поддержка VS 2011 - нет, но скорее всего будет пахать после небольшой правки.
    7) Ранее конечно было всё реализовано в виде макроса на VBA, но это было чуть неудобно.
    8) Отключение/Удаление стандартно через диспетчер расширений.

    Где можно взять это расширение:
    Расширение можно уже скачать с Microsoft по адресу
    http://visualstudiogallery.msdn.microsoft.com/b724a7ee-6768-44a4-ac9b-262788e6e9b1
    Надеюсь его не забанят )
    Исходники (c#) могу кинуть по запросу. Так что стучитесь в аську, мыло, жабер.


    Скрины:
    [​IMG]
    [​IMG]
     
    #1 slesh, 21 Jun 2012
    Last edited: 21 Jun 2012
    4 people like this.
Loading...