Программа зависает только при первом запуске?

Я пытаюсь отладить низкоуровневую программу на C в GDB. Рассматриваемая программа предназначена для использования в качестве оболочки, запускающей другой процесс и контролирующей / мешающей использованию его памяти.

Когда я загружаю программу в GDB, сначала все кажется нормальным (если не идеальным). Я вижу новый процесс форк, а потом он зависает. Само по себе это не было бы слишком странно; скорее всего тупик или бесконечный цикл где-то в моем коде.

Но если я прерву и убью процесс в GDB, а затем снова запустю его в том же сеансе GDB, все будет работать отлично. Запуск занимает около полсекунды и действует точно так, как должен.

Итак, мой вопрос: что сохраняет GDB между запусками моей программы? Что изменится между первым и вторым исполнением?

1 ответ

Я нашел причину, хотя до сих пор не понимаю, почему GDB действует так. Но я опубликую это здесь на случай, если это будет полезно для других.

Я запустил GDB:

gdb --args./mywrapper testers_exe / tester-2

При первом запуске:

/ home /имя пользователя/ mywrapper testers_exe / tester-2

Но когда его убили и снова запустили, он имитировал самый последний процесс, а не аргументы, которые ему давали:

/ home /имя пользователя/ testers_exe / tester-2 testers_exe / tester-2

Таким образом, он запускал тесты без обертки и избегал бесконечного цикла обертки.

Другие вопросы по тегам