Какова корректная интерпретация следующих сообщений segfault?
segfault at 10 ip 00007f9bebcca90d sp 00007fffb62705f0 error 4 in libQtWebKit.so.4.5.2[7f9beb83a000+f6f000]
segfault at 10 ip 00007fa44d78890d sp 00007fff43f6b720 error 4 in libQtWebKit.so.4.5.2[7fa44d2f8000+f6f000]
segfault at 11 ip 00007f2b0022acee sp 00007fff368ea610 error 4 in libQtWebKit.so.4.5.2[7f2aff9f7000+f6f000]
segfault at 11 ip 00007f24b21adcee sp 00007fff7379ded0 error 4 in libQtWebKit.so.4.5.2[7f24b197a000+f6f000]
Это ошибка сегментации, связанная с попыткой отслеживания нулевого указателя найти код для выполнения (то есть во время выборки инструкции).
Запустите addr2line -e yourSegfaultingProgram 00007f9bebcca90d
(и повторите для других заданных значений указателя инструкций), чтобы увидеть, где происходит ошибка. Лучше получить сборку с отладкой и воспроизвести проблему в отладчике, таком как gdb.
Вы, к сожалению, забиты; постфактум невозможно узнать, где библиотеки были помещены в память динамическим компоновщиком. Воспроизведите проблему в gdb
.
Вот разбивка полей:
адрес
(после в
) - место в памяти, к которому код пытается получить доступ (вероятно, что 10
и 11
- это смещения от указателя, который, как мы ожидаем, будет установлен на допустимое значение, но который вместо этого указывает на 0
) ip
- указатель инструкции, т.е.где код, который пытается это сделать, живет sp
- указатель стека ошибка
- код ошибки для ошибок страницы; см. ниже, что это означает для x86.
/ *
* Биты кода ошибки страницы:
*
* бит 0 == 0: страница не найдена 1: ошибка защиты
* бит 1 == 0: доступ для чтения 1: доступ для записи
* бит 2 == 0: доступ в режиме ядра 1: доступ в режиме пользователя
* бит 3 == 1: обнаружено использование зарезервированного бита { {1}} * бит 4 == 1: ошибка была при выборке инструкции
* /