Linux: Как отладить SIGSEGV? Как я прослеживаю ошибочный источник?

В следующем примере генерируются буквенные строки с заглавными буквами от A до Z и length = len.

QString randString(int len)
{
    QString str;
    str.resize(len);
    for (int s = 0; s < len ; ++s)
        str[s] = QChar('A' + char(qrand() % ('Z' - 'A')));

    return str;
}
7
задан ivan_ivanovich_ivanoff 21 June 2009 в 19:55
поделиться

2 ответа

Иван, ваш настоящий вопрос: «Как мне отладить SIGSEGV?»

strace здесь редко бывает хорошим подспорьем. SIGSEGV означает, что приложение пыталось разыменовать (получить доступ) место в памяти, которое не было выделено (или не было разрешено разыменование по различным другим причинам). Скорее всего, это не связано с активностью системных вызовов, которую захватывает strace. Чтобы выяснить причину вашего сбоя, начните с понимания того, какой адрес разыменовывается и какая функция пытается это сделать. Отладчик - подходящий инструмент для этой задачи.

Вот что вам нужно сделать:

 gdb <your_app_name> <your_coredump_file>

проанализировав последнюю выполненную инструкцию и используя «информационные регистры», вы увидите нужный адрес. Используя команду «bt», вы увидите стек вызовов. Подняв стек вызовов вверх, вы обнаружите, как вычисляется неверный адрес. Один из этапов вычисления адреса является причиной вашей проблемы.

Отладка - это весело, и это хорошая возможность вникнуть в нее. В этом вам могут помочь хорошая книга или несколько онлайн-статей. Удачи в Google!

21
ответ дан 6 December 2019 в 06:25
поделиться

Вы можете запустить firefox в режиме отладки следующим образом: firefox -d gdb

это запустит firefox внутри gdb.

Вы можете выполнить команду gdb «запустить» и получить трассировку при сбое firefox. Это может быть сложно, поскольку firefox поставляется с удаленными библиотеками, которые показывают только библиотеки и смещения кода, а не имен функций.

Другой альтернативой является запуск firefox в безопасном режиме: firefox -safe-mode и отключите все плагины, которые вы могли установить, пока он не перестанет давать сбой.

Последняя альтернатива - включить режим разработчика firefox и позволить ему отправлять сеанс сбоя firefox на сервере mozilla. Затем вы можете перейти на сайт mozilla и просмотрите подробную информацию о неудачном сеансе Firefox.

7
ответ дан 6 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: