Как отладить программу, которую вызывает другая программа?
Имеем программу main. Вызывается она так: main.exe "path/to/child.exe"
Аргументом её выступает путь до нашей программы child, которую необходимо отладить. Программа main перенаправляет потоки ввода/вывода для взаимодействия с child (т.е. child читает информацию от main из stdin, пишет для main в в stdout)
Вопрос в том, как произвести отладку программы child?
На ум приходит решение, логировать информацию, т.е. просто записывать в файл. Но хотелось бы иметь отладчик и вывод на консоль.
Хотелось бы разъяснить, такую форму обычно имеют программы проверки на различных олимпиадах по программированию. Где программа проверки запускает нашу с какими либо аргументами и проверяет вывод. Тут осложняется лишь тем, что обмен происходит постоянно во время выполнения. Программа main начинает "общение", программа child должна предпринять действия исходя из того что получила от main. Ответ child породит следующий запрос от main. И поехали взаимодействовать циклично.
Ну первое, что приходит в голову - прямо из Visual Studio "подцепляться" к процессу Child (Отладка->Присоедениться к процессу).
Если у вас есть ещё и исходники этого процесса, то может отладчик ещё и поймёт и позволит трассировать по коду, а не по дизассемблеру.
UPD
Чтобы отладчик мог сопоставить код и процесс - нужно, чтобы исполняемый файл был собран со всеми отладочными данными.
Vinatorul: я честно говорят тоже не совсем понял =)
А что вообще мешает запустить вторуюпрограмму из под отладчика и подставить в нее данные из первой программы...
Игорь Александрович: так а как, по-вашему, работает обычный запуск с отладкой? А так дизассемблер никто не отменял, а если оно собрано с отладочными данными, да под .NET - так вообще красота.
Можно поменять байт на точке входа в child на 0xCC и при запуске процесс долбанется. В это время вызывается JIT-отладчик (хоть та же студия), в нем меняется байт обратно и отлаживается софтина.