![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Есть прога (не моя и её исходников не имею), поэтому вопросы типа Отладка dll или Обрашение к dll в чужом адресном пространствемне не помогли.
Прога может подключать плагины в виде dll. Т.е. есть набор функций, которые прога вызываетв моей dll. А сама dll ложиться в папку plugins, и там автоматически подключается Вот такой плагин я и пишу. Проблема в том, что я не представляю как отлаживать dll из VC7 в чужом адресном пространстве: как поставить брейк поинт, как пройтись трассировщиком и т.п.? А то делать лог-файл не хочется (да и помогать мне он будет слабо) + как быть если отлаживать придется на удаленной машине? Это сообщение отредактировал(а) neosapient - 17.4.2007, 12:36 |
|||
|
||||
| korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
Если под VC7, то в Project->Properties->Debugging->Command пропиши путь к исполняеммому файлу, который атачит твою dll, а в DllMain() поставь breakpoint или где то еще...
-------------------- korbian © |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Вроде получилось.
Усложняю задачу: теперь прога импортирующая dll расположена на удаленном сервере. Как указать VC7 загрузить на удаленную машину в определенную папку dll, и указать VC7 эту самую импортирующую прогу, а затем еще и пройтись по брейкпоинтам трассировщиком??? Есть идеи? Это сообщение отредактировал(а) neosapient - 22.4.2007, 19:18 |
|||
|
||||
| Tectoder |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: 7 Всего: 8 |
neosapient, разве это мешает отладке?
|
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Tectoder, очень...
|
|||
|
||||
| Tectoder |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: 7 Всего: 8 |
Чем? Действительно, символы не твоего экзешника у тебя вполне могут не оказаться. Но символы dll, если они есть, вполне себе подгрузяться.
|
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
А что ты понимаешь под 'символами'?
|
|||
|
||||
| korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 и апликуха ее атачащая 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 Удачи. Может, что и забыл Это сообщение отредактировал(а) korbian - 23.4.2007, 08:33 -------------------- korbian © |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
korbian, ладно на работе буду пытаться сделать так как сказал
От меня + ----------------------------------- Попробовал, и вот задача вновь усложнилась. Создаваемый плагин запускается сервисом. Т.е. я запускаю сервис, тот проверяет папку 'plugins' и запускает все dll`ки. Теперь моя тестируемая dll захватывается сервисом и я не могу ни перезаписать, ни удалить её, до тех пор, пока не отключу сервис. Вопрос: как научить VC7 запускать сервис и при этом реагировать на поподание в брейк поинты (+трассировка). Это сообщение отредактировал(а) neosapient - 23.4.2007, 23:31 |
|||
|
||||
| korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
в DllMain() своей dll поставь банальный MessageBox(), на котором сервис встанет при загрузке твоей dll.
А дальше Debug->Process и приатачь свой процесс службы(если он не именнованный, то по очереди все svchost.exe до победного Таким же способом можно отлаживать процессы и удаленных машин. За +1 спасибо -------------------- korbian © |
|||
|
||||
| neosapient |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
А к чему галку ставить 1) Common Language Runtime 2) Microsoft T-SQL 3) Native 4) Script 1) Я думал к первому (не далось), но никаких реакций не последовало, только написал
2) Ко второму, думаю, ненадо, так как с БД не работаю 3) Прикрепил к третьему (далось), но, опять таки, дальше никаких реакций (я ожидал, что всплывет MessageBox) 4) Для чего нужен четвертый, про скрипты вообще не понимаю. З.Ы. Ставил MessageBox сюда
Но теперь сервис не грузится до конца и висит в списке служб в состоянии Запуск. Конечно я успиваю приаттачиться с пометкой (3) Native, но всеровно не вижу как запускается окошко MessageBox(...) - всё виснет Это сообщение отредактировал(а) neosapient - 24.4.2007, 10:37 |
||||||||
|
|||||||||
| korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
Поставь последним параметром MessageBox() флаг MB_SERVICE_NOTIFICATION,
видимо при создании службы не указали флаг SERVICE_INTERACTIVE_PROCESS, и MessageBox всплывет. А отлаживай через Native. -------------------- korbian © |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Всё, супер, заработало
korbian |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |