информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаВсе любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Здесь 15.11.05 12:15  Число просмотров: 2692
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> 1. Что-то во в этом роде я пробовал ...

> struct sigaction saUser;
> void UserSignal (int signum) { trow; } // здесь в разных
> комбинациях


> memset (&saUser,0,sizeof(saUser));
> saUser.sa_handler=&UserSignal;
> sigaction (11,&saUser,NULL);
>
> Но как восстановить (продолжить) работу приложения после
> перехвата 11 (SIGSEGV ) сигнала - у меня оно все время все
> равно погибает ?

Здесь

http://gcc.gnu.org/ml/gcc/1999-01n/msg00342.html

говорят, что лучшее, что можно сделать - это сделать дополнительный поток для кидания exception-ов и засинхронизировать его каким либо образом с потоком обработки сигнала (предлагают поллить, но как по мне, то лучше event-ы)

У меня есть мысль, что можно все сделать на основе setjmp/longjmp, только нужно быть ОЧЕНЬ осторожным с локальными переменными (посмотреть в отладчике правильно ли раскручивается стек после throw-а из кода, в который перешли по longjmp).

> 2. Вы случайно отладкой многопотокового приложения не
> занимались ? Отладкой с помощью gdb ?

Многопотокового - было, gdb - нет. Я виндовозник, а под виндой gdb существенно проигрывает микрософтовскому отладчику.
<beginners>
Обработка исключений с++ 13.11.05 23:56  
Автор: duu Статус: Незарегистрированный пользователь
<"чистая" ссылка>
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
try
{
int a;
for (int g=-11; g<11; g++) a=a/g; // деление на ноль
// throw 1;
}
catch(...)
{
printf(" >>> ");
return 0;
}

return 0;
}

Подскажите пожалуйста, как обрабатываются исключения
Должна ли (и почему у меня не выводится если должна / как сделать чтобы выводилась) выводиться строка printf(" >>> ");
никто не обещал, что c++-исключения обработают деление на ноль 14.11.05 00:11  
Автор: dl <Dmitry Leonov>
Отредактировано 14.11.05 00:16  Количество правок: 1
<"чистая" ссылка>
Это можно перехватить с помощью структурных исключений Win32. Есть вариант и скрестить - см.
_set_se_translator

Если очень на пальцах, то примерно так:
#include <eh.h>

class SE_Exception
{
private:
    unsigned int nSE;
public:
    SE_Exception() {}
    SE_Exception( unsigned int n ) : nSE( n ) {}
    ~SE_Exception() {}
    unsigned int getSeNumber() { return nSE; }
};

inline void trans_func( unsigned int u, EXCEPTION_POINTERS* pExp )
{
	throw SE_Exception(u);
}

inline void SetSETranslation()
{
	_set_se_translator( trans_func );
}

---

После чего аппаратные исключения будут приводить к c++-исключениям.
А в Линуксе как ??? 14.11.05 01:14  
Автор: duu Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А в Линуксе как (на самом деле у меня в ней проблема с выходом за границы char массива) ?

Я, видимо, ошибаюсь, думая, что исключения вызвает ось при любой нештатной работе приложения. Правильно думать, что в реализации класса должнен быть сделан отлов (проверка) допустимых значений (например) и генерация throw, если "что-то не так" ???
Sigsegv 14.11.05 11:33  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> А в Линуксе как (на самом деле у меня в ней проблема с
> выходом за границы char массива) ?

SIGSEGV

> Я, видимо, ошибаюсь, думая, что исключения вызвает ось при
> любой нештатной работе приложения. Правильно думать, что в

Ось не заточена под C++. У нее есть собственная модель исключений, которую можно использовать в любом языке программирования. В винде это SEH (structured exception handling), в линуксе сигналы. В общем случае C++ исключения и "исключения" операционной системы не пересекаются (в лучшем случае C++ исключения являются надстройкой над ОСевыми, как это сделано например в винде).

> реализации класса должнен быть сделан отлов (проверка)
> допустимых значений (например) и генерация throw, если
> "что-то не так" ???

Можно не проверять каждый раз диапазоны, а ловить исключения операционной системы и кидать C++ (собственно примерно так и делает _se_translator, который предложил dl)
1. Что-то во в этом роде я пробовал... 14.11.05 18:30  
Автор: duu Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1. Что-то во в этом роде я пробовал ...

struct sigaction saUser;
void UserSignal (int signum) { trow; } // здесь в разных комбинациях


memset (&saUser,0,sizeof(saUser));
saUser.sa_handler=&UserSignal;
sigaction (11,&saUser,NULL);

Но как восстановить (продолжить) работу приложения после перехвата 11 (SIGSEGV ) сигнала - у меня оно все время все равно погибает ?

2. Вы случайно отладкой многопотокового приложения не занимались ? Отладкой с помощью gdb ?
Здесь 15.11.05 12:15  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> 1. Что-то во в этом роде я пробовал ...

> struct sigaction saUser;
> void UserSignal (int signum) { trow; } // здесь в разных
> комбинациях


> memset (&saUser,0,sizeof(saUser));
> saUser.sa_handler=&UserSignal;
> sigaction (11,&saUser,NULL);
>
> Но как восстановить (продолжить) работу приложения после
> перехвата 11 (SIGSEGV ) сигнала - у меня оно все время все
> равно погибает ?

Здесь

http://gcc.gnu.org/ml/gcc/1999-01n/msg00342.html

говорят, что лучшее, что можно сделать - это сделать дополнительный поток для кидания exception-ов и засинхронизировать его каким либо образом с потоком обработки сигнала (предлагают поллить, но как по мне, то лучше event-ы)

У меня есть мысль, что можно все сделать на основе setjmp/longjmp, только нужно быть ОЧЕНЬ осторожным с локальными переменными (посмотреть в отладчике правильно ли раскручивается стек после throw-а из кода, в который перешли по longjmp).

> 2. Вы случайно отладкой многопотокового приложения не
> занимались ? Отладкой с помощью gdb ?

Многопотокового - было, gdb - нет. Я виндовозник, а под виндой gdb существенно проигрывает микрософтовскому отладчику.
sigsetjmp/siglongjmp вроде дали какой-то результат ... (изучение продолжается ...) 18.11.05 21:40  
Автор: duu Статус: Незарегистрированный пользователь
<"чистая" ссылка>

> У меня есть мысль, что можно все сделать на основе
> setjmp/longjmp, только нужно быть ОЧЕНЬ осторожным с
> локальными переменными (посмотреть в отладчике правильно ли
> раскручивается стек после throw-а из кода, в который
> перешли по longjmp).

sigsetjmp/siglongjmp вроде дали какой-то результат ... (изучение продолжается ...)

Я хотел спросить, может какой-нибудь есть хороший форум по линукс программированию (какие я самостоятельно нашел - вялотекущие какие-то) ?
именно так, throw кто-то должен вызвать 14.11.05 02:24  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach