2016-09-30 2 views
0

Я пытаюсь отлаживать низкоуровневую программу C в gdb. Данная программа предназначена для работы в качестве оболочки, запуска другого процесса и мониторинга/вмешательства в использование памяти.Программа зависает только при первом запуске?

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

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

Так что мой вопрос: Что такое сохранение gdb между запусками моей программы? Что изменилось бы между первым и вторым исполнением?

+0

Некоторая память может иметь несколько разных значений. Некоторое HW-состояние может быть другим (вы говорите, что это низкоуровневое). Многое может случиться. –

+0

Возможно, вы получаете доступ к некоторой неинициализированной переменной и, таким образом, попадете в какой-то замок. Во втором и последующих запусках сегмент данных вашего текущего процесса, вероятно, повторно используется и тот же, что и раньше, но теперь как начальные значения. Следите за предупреждениями «неинициализированные переменные». – tofro

+0

«Но когда я прерываю и убиваю процесс» - * который * процесс? Тот, который вы отлаживаете, или тот, который был разветвлен (или оба)? –

ответ

0

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

Я запустил GDB:

GDB --args ./mywrapper testers_exe/тестер-2

При запуске в первый раз:

/дома/имя пользователя/mywrapper testers_exe/тестер-2

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

/дома/имя пользователя/testers_exe/тестер-2 testers_exe/тестер-2

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

Смежные вопросы