Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отладка плагина (dll) 
V
    Опции темы
neosapient
Дата 17.4.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Есть прога (не моя и её исходников не имею), поэтому вопросы типа Отладка dll или Обрашение к dll в чужом адресном пространствемне не помогли.

Прога может подключать плагины в виде dll. Т.е. есть набор функций, которые прога вызываетв моей dll. А сама dll ложиться в папку plugins, и там автоматически подключается
Вот такой плагин я и пишу.

Проблема в том, что я не представляю как отлаживать dll из VC7 в чужом адресном пространстве: как поставить брейк поинт, как пройтись трассировщиком и т.п.?

А то делать лог-файл не хочется (да и помогать мне он будет слабо)

+ как быть если отлаживать придется на удаленной машине?

Это сообщение отредактировал(а) neosapient - 17.4.2007, 12:36
PM MAIL   Вверх
korbian
Дата 17.4.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 9
Всего: 14



Если под VC7, то в Project->Properties->Debugging->Command пропиши путь к исполняеммому файлу, который атачит твою dll, а в DllMain() поставь breakpoint или где то еще...  smile 



--------------------
korbian ©
PM   Вверх
neosapient
Дата 22.4.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Вроде получилось.

Усложняю задачу: теперь прога импортирующая dll расположена на удаленном сервере.
Как указать VC7 загрузить на удаленную машину в определенную папку dll, и указать VC7  эту самую импортирующую прогу, а затем еще и пройтись по брейкпоинтам трассировщиком???

Есть идеи?

 smile 

Это сообщение отредактировал(а) neosapient - 22.4.2007, 19:18
PM MAIL   Вверх
Tectoder
Дата 22.4.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



neosapient, разве это мешает отладке?
PM   Вверх
neosapient
Дата 22.4.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Tectoder, очень...
PM MAIL   Вверх
Tectoder
Дата 22.4.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



Чем? Действительно, символы не твоего экзешника у тебя вполне могут не оказаться. Но символы dll, если они есть, вполне себе подгрузяться.
PM   Вверх
neosapient
Дата 23.4.2007, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



А что ты понимаешь под 'символами'?
PM MAIL   Вверх
korbian
Дата 23.4.2007, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 9
Всего: 14



1. Найди(в директории с установленным MS VC 7.1) и скопируй эти файлы в папку на удаленной машине
dbghelp.dll
msvcmon.exe
msvcp71.dll
msvcr71.dll
NatDbgDM.dll
NatDbgTLNet.dll
psapi.dll
2. Расшарь папку на удаленной машине, в которую будут собираться твой исполняемые файлы(dll и апликуха ее атачащая  smile )
3. В настройках проекта, поменяй следующее:
3.1 Project->Properties->Debugging->Command тоже самое(см мой пост выше), только относительно расшаренной папки на удаленной машине(Пример: remoteHost\shared\atachDll.exe)
3.2 Project->Properties->Debugging->Remote Settings->Connection: Remote via TCP\IP  или Remote via  Pipe на выбор
3.3 Project->Properties->Debugging->Remote Settings->RemoteMachine: имя удаленной машины(пример remoteHost)
3.4 Project->Properties->Debugging->Remote Settings->RemoteCommand: продублируй 3.1 только уже локальный путь(хотя хз, не помню, может 3.1 не надо )
3.5 3.3 Project->Properties->Linker->General->Output Files: путь к сборке на удаленной машине (remoteHost\shared\atached.dll)
4. На удаленной машине запусти msvcmon.exeс такими флагами -tcpip(если 3.2 Remote via TCP\IP ) -anyuser

Удачи. Может, что и забыл smile , давно дело было, но помогло, эт точно.  


Это сообщение отредактировал(а) korbian - 23.4.2007, 08:33


--------------------
korbian ©
PM   Вверх
neosapient
Дата 23.4.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



korbian, ладно на работе буду пытаться сделать так как сказал  smile 

От меня +

-----------------------------------

Попробовал, и вот задача вновь усложнилась.
Создаваемый плагин запускается сервисом. Т.е. я запускаю сервис, тот проверяет папку 'plugins' и запускает все dll`ки.
Теперь моя тестируемая dll захватывается сервисом и я не могу ни перезаписать, ни удалить её, до тех пор, пока не отключу сервис.

Вопрос: как научить VC7 запускать сервис и при этом реагировать на поподание в брейк поинты (+трассировка).

Это сообщение отредактировал(а) neosapient - 23.4.2007, 23:31
PM MAIL   Вверх
korbian
Дата 24.4.2007, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 9
Всего: 14



в DllMain() своей dll поставь банальный MessageBox(), на котором сервис встанет при загрузке твоей dll.
А дальше Debug->Process и приатачь свой процесс службы(если он не именнованный, то по очереди все svchost.exe до победного  smile )
Таким же способом можно отлаживать процессы и  удаленных машин.
За +1 спасибо  smile 


--------------------
korbian ©
PM   Вверх
neosapient
Дата 24.4.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Цитата

А дальше Debug->Process и приатачь свой процесс службы

А к чему галку ставить
1) Common Language Runtime
2) Microsoft T-SQL
3) Native
4) Script

1) Я думал к первому (не далось), но никаких реакций не последовало, только написал
Цитата

Unable to attach to the proces. There is no managed code running in the process. In order to attach with the .NET debudder, managed code must be running in the process before attaching.

2) Ко второму, думаю, ненадо, так как с БД не работаю
3) Прикрепил к третьему (далось), но, опять таки, дальше никаких реакций (я ожидал, что всплывет MessageBox)
4) Для чего нужен четвертый, про скрипты вообще не понимаю.

З.Ы.
Ставил MessageBox сюда
Код

BOOL APIENTRY DllMain(HANDLE hModule,DWORD  param,LPVOID /*lpReserved*/)
  {
   switch(param)
     {
      case DLL_PROCESS_ATTACH:
        MessageBox(NULL,"Stop","Test",MB_OK);
        break;

      case DLL_THREAD_ATTACH:
      case DLL_THREAD_DETACH:
        break;

      case DLL_PROCESS_DETACH:
        break;
     }
   return(TRUE);
  }



Цитата

я запускаю сервис, тот проверяет папку 'plugins' и запускает все dll`ки.

Но теперь сервис не грузится до конца и висит в списке служб в состоянии Запуск.
Конечно я успиваю приаттачиться с пометкой (3) Native, но всеровно не вижу как запускается окошко MessageBox(...) - всё виснет

Это сообщение отредактировал(а) neosapient - 24.4.2007, 10:37
PM MAIL   Вверх
korbian
Дата 24.4.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 9
Всего: 14



Поставь последним параметром MessageBox() флаг MB_SERVICE_NOTIFICATION,
 видимо при создании службы не указали флаг SERVICE_INTERACTIVE_PROCESS, и MessageBox всплывет.
А отлаживай через Native.


--------------------
korbian ©
PM   Вверх
neosapient
Дата 24.4.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Всё, супер, заработало  
korbian smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.