Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235

Дамп строки и автоматический запуск при падении

25.01.2012, 22:22. Показов 2191. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть приложение, ему по сети передаются разные данные. От определенных данных приложение падает.
При получении данных - они сначала записываются в буфер размером 5 мегабайт (массив чаров), а дальше буфер разбирается в другие маленькие буферы и в них происходит обработка, которая иногда приводит к падениям.
Дак вот, мне, при падении, нужно:
1. сохранить в текстовый файл содержимое пятимегабайтного буфера
2. запустить это приложение снова.
Подскажите как непосредственно в коде выполнить участок кода при падении? А также как запустить приложение снова?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.01.2012, 22:22
Ответы с готовыми решениями:

Запуск процесса несколько раз при падении
Здравствуйте. Помогите пожалуйста с кодом. Мне нужно организовать перезапуск процесса при его падении, заданную количество раз. Не знаю...

Автоматический запуск Командной строки с выполнением определённой команды
Всех с Праздниками, такой вопрос каждый раз открываю консоль и прописываю команду netsh wlan start hostednetwork для запуска виртуального...

Автоматический запуск приложения при загрузке ОС
кАК ПРОПИСАТЬ В VB6 ЧТОБЫ МОЁ ПРИЛОЖЕНИЕ ЗАПУСКАЛОСЬ ПРИ ЗАГРУЗКИ ОС

8
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
25.01.2012, 22:34
Можно перехватить SIGSERV, записать своё хозяйство и запустить что надо через system(). Но лучше не костыли подставляй, а разберись с падениями.
1
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
25.01.2012, 22:57  [ТС]
Я с падениями разобрался. Сейчас, пока пишу сервак, его легко отладить, т.к. он работает в 1% нагрузки и проц справляется в debug режиме... и приложение не падает.
А конечную версию придется компилить уже с оптимизациями, в Release режиме, т.к. нагрузка будет на порядки больше. И фиг знает что там будет, какой хлам на него будут слать. Все дыры сразу не отловить...
Тем более аптайм сервера должен стремиться к 100%. Точнее допуск не более 30 секунд неработы.
По буферу я могу легко воспроизвести ошибку на другом компьютере, подправить там код, скомпилить и быстро запустить на сервере исправленную версию.

При этом не ну нужно удерживать его от падения, только записать буфер, заново запустить и пускай себе дальше падает со всеми процессами освобождения памяти и т.д.
Вы можете дать пример кода?
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
25.01.2012, 23:31
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
 
char buf[64] = "Magic data\n";
char *self;
 
void handler(int sig)
{
    puts("Get SIGSEGV!");
    FILE *fd = fopen("backup", "w");
    fwrite(buf, sizeof(char), 64, fd);
    fclose(fd);
    system(self);
}
 
int main(int argc, char *argv[])
{
    signal(SIGSEGV, &handler);
    self = argv[0];
    FILE *fd;
    if(fd = fopen("backup", "r"))
    {
        fread(buf, sizeof(char), 64, fd);
        buf[63] = 0;
        printf("Old buf: %s\n", buf);
        fclose(fd);
    }
    else
        puts("Backup not found");
    puts("Press any key for segfautl");
    getchar();
    int i = *(int*)777;
}
Но так в памяти весит две копии... Перезапускать лучше извне.
1
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
26.01.2012, 00:45  [ТС]
А можете поподробнее, почему в памяти висят 2 копии? Я так понял это связано с system(), который блокирует приложение до тех пор, пока не будет выполнено приложение запущенное им?

Добавлено через 5 минут
Вот нашел на каком-то сайте что установка вконце символа & делает system("command here &"); неблокирующей.
И еще вроде есть другие функции... впринципе наверно действительно лучше извне сделать скриптик и запускать им.

А так, вцелом, если убрать system() из вашего кода, то приложение завершится нормально при ошибке? Просто я не могу никак понять как происходит перехват ошибки и что происходит дальше.
Вообще ведь при любой ошибке сразу запускаются деструкторы, освобождается память и приложение полностью корректно завершается.
А если перехватить ошибку, мне не понятно что происходит после выполнения void handler(int sig)
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
26.01.2012, 01:04
На самом деле там в конце handler был exit(), тогда всё нормально завершиться, в процессе экспериментов с перезапуском потерял. Перехват ровно такой же, как любых других сигналов: если по каким-либо причинам пришёл сигнал и для него есть обработчик, туда сразу передается управление. После его возврата из функции-обработчика программа начинает работать с того места, где поймала сигнал.
1
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
26.01.2012, 04:16  [ТС]
Т.е. если exit() вконец void handler(int sig) не вставить, то программа завершена не будет и продолжит работать?
И еще, пишут что exit немедленно завершает процесс и при этом никакие ресурсы корректно не освобождаются. Чем это плохо и можно ли сделать как-то правильнее?
Извиняюсь за такие вопросы, сейчас нет возможности самому запустить код и посмотреть.
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
26.01.2012, 19:01
Цитата Сообщение от Damaks Посмотреть сообщение
Т.е. если exit() вконец void handler(int sig) не вставить, то программа завершена не будет и продолжит работать?
Да, она продолжит работу, но надо сильно извратиться, чтобы после сегфолта все данные были заведомо корректными, лучше уж перезапустить.
Цитата Сообщение от Damaks Посмотреть сообщение
exit немедленно завершает процесс и при этом никакие ресурсы корректно не освобождаются
Вообще-то это стандартный способ завершения программ... Вся память, дескрипторы и прочие системные ресурсы освобождаются, что ещё нужно?
1
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
26.01.2012, 22:04  [ТС]
Нет, спасибо, вы полностью раскрыли тему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2012, 22:04
Помогаю со студенческими работами здесь

Автоматический запуск приложений при загрузке системы
Привет помогите ищю программу которая может очень хорошо записать действия мышки можно просто мышки а лучше бы и клавиатуры и патом сама...

Автоматический запуск формы при открытии документа
Народ помогите плиз, надо что бы при открытии заданного документа Word например 1.doc поверх текста появлялась UserForm, вставить то я ее...

Автоматический запуск макроса при старте Word-а
Может ли макрос запускаться автоматически, при открытии документа. И еще, никто не знает, где можно достать список обьектов и методов и...

Автоматический запуск программы при загрузке Windows
Что нужно сделать чтоб программа автоматически запускалась при загрузке Windows. Подскажите пожалуйсто, или где про это мона почитать, или...

Автоматический запуск формы при открытии книги
здравствуйте мне нужно создать программу Auto_Open которая при открытии книги Excel автоматически будет запускать форму.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru