The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"как ловить исключения в С?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"как ловить исключения в С?"
Сообщение от cook emailИскать по авторуВ закладки on 02-Янв-02, 06:42  (MSK)
Проблемка такая образовалась:
скрипт на С написанный вроде работает и делает все что надо, но время от времени .core дает.
как найти ошибку т.е как исключение поймать?

на С++ знаю try catch есть для этого...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: как ловить исключения в С?"
Сообщение от romanSA Искать по авторуВ закладки on 03-Янв-02, 11:55  (MSK)
>Проблемка такая образовалась:
>скрипт на С написанный вроде работает
>и делает все что надо,
>но время от времени .core
>дает.
>как найти ошибку т.е как исключение
>поймать?
>
>на С++ знаю try catch есть
>для этого...

Исключений в C нет. А в core программа падает по причине некорректного обращения к памяти: скорее всего или free() вызывается к уже освобождённому указателю, либо используется этот самый указатель, либо там, где должна быть нуль-терминированная строка, используется что-то другое.
В общем компили программу с -g, бери gdb и:
$ gdb program core
выдаст на каком вызове всё упало.

Подробнее см. man gdb


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: как ловить исключения в С?"
Сообщение от Арлекин Искать по авторуВ закладки on 03-Янв-02, 12:14  (MSK)
Перехвати сигналы с 10 по 12.
Общее описание man -s5 signal:
.........
Name      Value    Default     Event
______________________________________________
..............
SIGBUS      10      Core      Bus Error
SIGSEGV    11      Core      Segmentation Fault
SIGSYS      12      Core      Bad System Call
..............

Функция перехвата
signal( int, void(*)(int)) описана в
man -s3C signal.
Только управление назад не возвращай - опять отвалится.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: как ловить исключения в С?"
Сообщение от romanSA Искать по авторуВ закладки on 03-Янв-02, 15:15  (MSK)
Хороший вариант, но что делать в обработчике сигналов? Ведь программа не может дальше работать в _штатном_ режиме?
Единственное, что по-моему здесь можно сделать, так это - вывести сообщение о случившемся.
Или не так?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: как ловить исключения в С?"
Сообщение от Арлекин Искать по авторуВ закладки on 03-Янв-02, 16:43  (MSK)
В общем так. Я обычно их ставлю в релиз-версии.
Можно попытаться закрыть нужный файл, в плюсе можно принудительно деструктор вызвать (если с catch'ами накололся ), или system'ом по почте сообщение заслать... Да и здоровенные "корки" на боевом сервере без надобности. Или, перехватить, SIGALRM например, и корректно останавливать длинный процесс.
В общем случае - никогда не помешает, ИМХО.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: как ловить исключения в С?"
Сообщение от romanSA Искать по авторуВ закладки on 03-Янв-02, 17:26  (MSK)
Я правда борюсь с "core" другими средствами: просто запрещаю юзеру, под которым всё вертится, сбрасывать core больше чем XXX Кб и всё.
А с остальным согласен (вот только с деструкторами - поосторожнее надо быть).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: как ловить исключения в С?"
Сообщение от cook emailИскать по авторуВ закладки on 06-Янв-02, 18:32  (MSK)
я и не знал что из коры можно получить в каком месте облом произошел, я уже ввел логирование в файл чуть ли не каждого действия и все равно нихрена не нашел...
Всем спасибо

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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