Запуск программы под отладчиком MS Visual C++ 6
От: black_jesus  
Дата: 16.12.04 20:47
Оценка:
Заранее извиняюсь за идиотский вопрос, но ничего не могу найти в документации. Моя программа под MS Visual C++ 6 запускается на выполнение другой программой, написанной на Delphi. Мне требуется, чтобы моя программа выполнялась в отладчике. Перепробовал много вариантов, но ни один не сработал — программа запускается, но отладчик сообщает, что все точки останова недействительны и предлагает остановить программу на первой инструкции, что впоследствии и делает. То есть программа (по видимому та, что запускает мою программу) запускается под отладчиком, но мне-то нужен не ассемблерный листинг, а читаемый код на С++ и не запускающей программы, а моей собственной. При всех этих операциях я указывал в настройках проекта в качестве "Executable for debug session" имя запускающей прграммы. "Attach to process" в настройках проекта не получается по определению (запускающая программа при своем старте запускает мою). Я пробовал размещать все генерируемые двоичные файлы (.obj, .pdb и т.д.) в директории с exe-файлом, но тоже безуспешно. Использование DebugBreak() тоже ничего не дало. Если это вообще возможно, и кто-нибудь знает как это делается пожаллуйста подскажите. Заранее благодарен.
Re: Запуск программы под отладчиком MS Visual C++ 6
От: Alter_ Украина http://alter.org.ua
Дата: 16.12.04 22:55
Оценка:
Здравствуйте, black_jesus, Вы писали:

_>Заранее извиняюсь за идиотский вопрос, но ничего не могу найти в документации. Моя программа под MS Visual C++ 6 запускается на выполнение другой программой, написанной на Delphi. Мне требуется, чтобы моя программа выполнялась в отладчике. Перепробовал много вариантов, но ни один не сработал — программа запускается, но отладчик сообщает, что все точки останова недействительны и предлагает остановить программу на первой инструкции, что впоследствии и делает. То есть программа (по видимому та, что запускает мою программу) запускается под отладчиком, но мне-то нужен не ассемблерный листинг, а читаемый код на С++ и не запускающей программы, а моей собственной. При всех этих операциях я указывал в настройках проекта в качестве "Executable for debug session" имя запускающей прграммы. "Attach to process" в настройках проекта не получается по определению (запускающая программа при своем старте запускает мою). Я пробовал размещать все генерируемые двоичные файлы (.obj, .pdb и т.д.) в директории с exe-файлом, но тоже безуспешно. Использование DebugBreak() тоже ничего не дало. Если это вообще возможно, и кто-нибудь знает как это делается пожаллуйста подскажите. Заранее благодарен.


Я бы попробовал либо встроить int 3, либо сгенерить exception (например обратиться по левому адресу).
При этом нужно вообще убедиться, что System Debugger — VC6, а не Delphi (как — не знаю).
А чтобы VC6 было легче искать исходники, собирать это приложение с Debug Info в стиле
Program Database for Edit and Continue (тогда в .exe идут полные пути к исходникам):
Project Settings --> C/C++ --> Category: General, Debug Info

Delphi приложение запускается без Debuger'а, а VC6 свалится и потребует, чтобы его отладили.

Ну и на совсем крайний случай — SoftIce или вообще, писать логи в файл или OutputDebugString(),
а там уже разбираться, что не так работает.

Кажется так (c) Винни Пух.

--
Alter, http://alter.org.ua
--
Alter, http://alter.org.ua
Re: Запуск программы под отладчиком MS Visual C++ 6
От: Alex Alexandrov США  
Дата: 17.12.04 21:11
Оценка:
Здравствуйте, black_jesus, Вы писали:

_>Заранее извиняюсь за идиотский вопрос, но ничего не могу найти в документации. Моя программа под MS Visual C++ 6 запускается на выполнение другой программой, написанной на Delphi. Мне требуется, чтобы моя программа выполнялась в отладчике. Перепробовал много вариантов, но ни один не сработал — программа запускается, но отладчик сообщает, что все точки останова недействительны и предлагает остановить программу на первой инструкции, что впоследствии и делает. То есть программа (по видимому та, что запускает мою программу) запускается под отладчиком, но мне-то нужен не ассемблерный листинг, а читаемый код на С++ и не запускающей программы, а моей собственной. При всех этих операциях я указывал в настройках проекта в качестве "Executable for debug session" имя запускающей прграммы. "Attach to process" в настройках проекта не получается по определению (запускающая программа при своем старте запускает мою). Я пробовал размещать все генерируемые двоичные файлы (.obj, .pdb и т.д.) в директории с exe-файлом, но тоже безуспешно. Использование DebugBreak() тоже ничего не дало. Если это вообще возможно, и кто-нибудь знает как это делается пожаллуйста подскажите. Заранее благодарен.


Один из способов: идем в реестр по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options. Создаем там ключ (т.е. папку) с именем исполняемого файла, который ты хочешь отлаживать. Не путь, а просто имя. Типа myprog.exe. В этом ключе создаем строковое значение Debugger со значением (сорри за тавтологию) "C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE" или где там у тебя студия. Потом запускаешь первую программу. В момент, когда она позовет твою программу, будет запущена студия. Сделай там Build->Start Debug->Go и вперед.
[ Posted via RSDN@Home 1.1.4 beta 3 (185) listening to the silence... ]
It's kind of fun to do the impossible (Walt Disney)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.