Я пытаюсь отлаживать низкоуровневую программу C в gdb. Данная программа предназначена для работы в качестве оболочки, запуска другого процесса и мониторинга/вмешательства в использование памяти.Программа зависает только при первом запуске?
Когда я загружаю программу в gdb, все сначала кажется нормальным (если не идеальным). Я вижу новую вилку процесса, а затем она висит. Само по себе это было бы не слишком странно; вероятно, тупик или бесконечный цикл где-то в моем коде.
Но если я прерываю и убиваю процесс в gdb, а затем запускаю его снова в том же сеансе gdb, все работает отлично,. Для запуска требуется около полутора секунд и действует точно так, как должно.
Так что мой вопрос: Что такое сохранение gdb между запусками моей программы? Что изменилось бы между первым и вторым исполнением?
Некоторая память может иметь несколько разных значений. Некоторое HW-состояние может быть другим (вы говорите, что это низкоуровневое). Многое может случиться. –
Возможно, вы получаете доступ к некоторой неинициализированной переменной и, таким образом, попадете в какой-то замок. Во втором и последующих запусках сегмент данных вашего текущего процесса, вероятно, повторно используется и тот же, что и раньше, но теперь как начальные значения. Следите за предупреждениями «неинициализированные переменные». – tofro
«Но когда я прерываю и убиваю процесс» - * который * процесс? Тот, который вы отлаживаете, или тот, который был разветвлен (или оба)? –