Программа зависает только при первом запуске?
Я пытаюсь отладить низкоуровневую программу на 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
Таким образом, он запускал тесты без обертки и избегал бесконечного цикла обертки.