LINUX.ORG.RU

Проблема с отладкой в GDB.


0

0

Процесс падает по сигналу SIGSEGV, а мне нужно понять по какой причине он падает (что вызывает этот чигнал). Я делал следующим образом: указывал командой 'file' файл, который нужно запустить по GDB и отлаживать, потом в команде 'run' указывал ключи к программе и запускал её; командами handle SIGSEGV nopasss и handle SIGSEGV stop говорил отладчику, чтобы он стопил выполнение процесса при приходе этого сигнала (чтобы потом посмотреть информацию (хотя пока не знаю что и как =) ) и определить причину ошибки). Но проблема в том, что при приходе SIGSEGV выполнение не останавливается, а процесс просто падает. (кстати на сигнал в программе написан обработчик, но я не думаю что проблема в этом) Что делать?

anonymous
Ответ на: комментарий от ananas

На сколько я понял нужно еще выполнить команду "catch signal SIGSEGV", чтобы приостановить сервер по приходу сигнала. Но GDB говорит, что "Catch of signal not yet implemented". Кроме того, даже при запущенной под GDB программе при попытки вывода первого кадра стэка, GDB говорит что стэк пуст. Я в шоке.

anonymous
()
Ответ на: комментарий от anonymous

То ли еще будет :) Я СТОЛЬКО намучился с этим GDB, что... Попробуй, если еще не сделал, заюзать GDB 6. Он ничуть не менее глючный чем остальные, но вдруг. Еще попробуй поставить бряк на тот адрес, где падает твой процесс. Если прога твоя, то сделай сам обработчик SIGSEGV. Можно будет замутить в этом обработчике что хочешь. Что скажешь?

anonymous
()

Доброго времени суток.
Компиллировалм как ? -g была включена ?
Далее - мне нравится ddd. GUI над gdb. Попробуйте им. Во всяком случае баги ищутся и неплохо.
Best respect,$echo from Siberia.

anonymous
()
Ответ на: комментарий от anonymous

Проблема решилась следующим образом. Вместо того, чтобы запускать процесс из под GDB, я сначала запустил сервер, потом запустил GDB и зацепился к процессу коммандой 'attach pid'. После чего командой 'file' указал таблицу символов и все стало чики-пуки. Стэк показывает. При получении сигнала останавливается. Но почему так.. понять не могу.

anonymous
()
Ответ на: комментарий от anonymous

Да, компилял с отладочной информацией.

anonymous
()
Ответ на: Re: от asd

> gdb your-executable core > [skipped] > (gdb) bt

Backtrace? Я написал выше, что при попытке прочитать кадры стэка, GDB говорит что стэк пуст.

anonymous
()
Ответ на: комментарий от anonymous

>Еще попробуй поставить бряк на тот адрес, где падает твой процесс. Если прога твоя, то сделай сам обработчик SIGSEGV. Можно будет замутить в этом обработчике что хочешь.

Так по порядку. Во-первых: я не знаю где возникает ошибка сегментации, поэтому куда ставить бряк - непонятно. Во-вторых: что мне даст обработчик сигнала? Он же не скажет где возникла ошибка. Он просто обработает сигнал.

anonymous
()
Ответ на: комментарий от anonymous

+

1) А зачем так сильно мучатся - не проще ли написать fg отладочную версию
для твоего демона (если я правильно понял задачу) и ловить ошибки уже в ней
2) Про обработчик SIGSEGV и место возникновения ошибки man sigaction
(там ловится МЕСТО при обращении к которому генерится сигнал)
3) Если интересует место генерации сигнала в самом коде - поищи
бери SEH-приблуду для ловли таких ситуаций http://home.rochester.rr.com/bigbyofrocny/GEF/

sS ★★★★★
()
Ответ на: + от sS

Перехватывай все исключения, если на C++ пишешь

anonymous
()
Ответ на: комментарий от anonymous

>Перехватывай все исключения, если на C++ пишешь

Это не ко мне ;) У меня все ловится уже много лет как ;)

Я еще для 2.91 (а может и раньше) написал враппер сигналов через плюсовый SEH - так и таскаю его до сих пор из версии в версию ;)

PS: А ++ уже ловят SIGSEGV сами ? ;)

sS ★★★★★
()
Ответ на: комментарий от anonymous

То, что стек пуст означает, что он уже здорово попорчен. Это характерный симптом переполнения локального массива, worm-style; SIGSEGV скорее всег происходит при возврате из функции на фоне испорченного стека.

Отладка будет трудоемкой. Изучите код на предмет локальных массивов и небезопасных вызовов (gets, scanf и компания). Далее действуйте последовательными приближениями... надеюсь, ошибка воспроизводима?

vnp
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.