The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"gdb и адрес SegFault"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"gdb и адрес SegFault"  
Сообщение от devcoder email(??) on 13-Сен-07, 13:41 
Есть программа на С. Очень редко, но постоянно, вылетает по SegFault (code 1, addr 0xXXXXX).

Сейчас, по ошибке разматываю стек backtrace-ом и знаю функцию в которой возникает ошибка.

Вопрос: можно ли каким-то инструментом (gdb или другим) найти по адресу 0xXXXXX точное место в коде, где возникает ошибка (может этот адрес в glibc???)?

Если такая возможность существует, очертите пожалуйста область поиска в доках,
в каком направлении рыть.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "gdb и адрес SegFault"  
Сообщение от Forth (??) on 13-Сен-07, 14:17 
>Если такая возможность существует, очертите пожалуйста область поиска в доках,
>в каком направлении рыть.

Собрать с отладочными версиями всех библиотек.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "gdb и адрес SegFault"  
Сообщение от devcoder email(??) on 13-Сен-07, 15:08 
>Собрать с отладочными версиями всех библиотек.

Насколько я понял, это даст более информативный backtrace (туда войдут функции glibc),
но как узнать _строку кода в приложении_, вызвавшего ошибку, по адресу segfault.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "gdb и адрес SegFault"  
Сообщение от Forth (??) on 13-Сен-07, 16:05 
>>Собрать с отладочными версиями всех библиотек.
>
>Насколько я понял, это даст более информативный backtrace (туда войдут функции glibc),
>
>но как узнать _строку кода в приложении_, вызвавшего ошибку, по адресу segfault.
>

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "gdb и адрес SegFault"  
Сообщение от devcoder email(??) on 13-Сен-07, 16:13 
>Дык gdb же пишет в полном бэктрейсе строку кода где была ошибка
>и сам трейс функций со строками. Лишь бы отладочная информация была.

Проблема в том что возникает она очень редко, то есть отловить её лично мне одному, запустив прогу под gdb маловероятно. А вот юзеры, пару раз логи присылали.

В итоге имею:
* адрес segfault,
* бинарник,
* исходный код,
* gdb,
ну и желание, имея всё вышеперечисленное, найти строку в исходном коде.
P.S. coredump, к сожалению, нет.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "gdb и адрес SegFault"  
Сообщение от DeadMustdie email(??) on 13-Сен-07, 16:43 
>P.S. coredump, к сожалению, нет.

Адрес... ну можно попробовать прогу запустить под отладчиком и распечатать содержимое диапазона адресов командой disassemble.

А лучше попросить включить генерацию core-файлов и при возникновении ошибки таковой посмотреть отладчиком.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "gdb и адрес SegFault"  
Сообщение от Forth (??) on 13-Сен-07, 17:21 
>[оверквотинг удален]
>лично мне одному, запустив прогу под gdb маловероятно. А вот юзеры,
>пару раз логи присылали.
>
>В итоге имею:
> * адрес segfault,
> * бинарник,
> * исходный код,
> * gdb,
>ну и желание, имея всё вышеперечисленное, найти строку в исходном коде.
>P.S. coredump, к сожалению, нет.

Вообще конечно лучше собрать с отладочной инфой да отправить погулять до корки, но раз такое дело - собрать программу в точно таком же окружении, то бишь там же где и собирали, с теми же опциями, только добавить -g. Загрузить в gdb и написать ему:
b *адреснакоторомпадает
например:
b *0x80485f1
Оно и напишет в ответ на какой строке кода встанет бряк.

Но не стоит так делать, ненадежный метод. Вдруг segfault у вас оттого, что куда-то не туда перешло управление? Может где вызов функции по указателю, а он попорчен. Оно туда перешло, погуляло, да и выпало.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "gdb и адрес SegFault"  
Сообщение от devcoder email(??) on 13-Сен-07, 19:25 
Спасибо всем, cоберу бинарник только с "-g -O0", попрошу включить корки и подожду.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру