Каков наилучший способ отладки ошибки в моей сборке SPARC? - PullRequest
2 голосов
/ 04 декабря 2010

Я пишу компилятор sparc.Один из моих тестовых примеров работает нормально при обычном запуске из командной строки, но при неудачном перенаправлении вывода в файл происходит ошибка.

Я пытался использовать GDB, но это сложно при сборке.Как я могу понять что-то простое, например, какая сборочная линия вызывает ошибку segfault?

1 Ответ

3 голосов
/ 04 декабря 2010

К сожалению, GDB - действительно лучший способ отладить проблемы машинного уровня в UnixSPARC, что довольно печально.

Основная вещь, которую нужно понять, это то, что segfault является своего рода исключением, а исключения приводят к тому, что программа врывается в отладчик, если он подключен.Они делают это, чтобы вы могли проверить состояние регистров процессора и памяти в момент сбоя.

Вы должны взглянуть на регистр счетчика команд (% ip).Он будет содержать адрес последней выполняемой инструкции, которая является командой, которая вызвала segfault.Это будет операция загрузки или сохранения, так что вы можете посмотреть, какой регистр содержит адрес памяти источника / назначения, и выяснить, почему этот адрес плохой (обычно это NULL или какой-то мусорный номер, который не является действительным адресом).

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

...