Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
#1

вопрос к опытным программистам - C++

13.07.2011, 13:22. Просмотров 793. Ответов 12
Метки нет (Все метки)

напишите пожалуйста, как часто вам приходилось или приходится использовать для обработки ошибок
механизм try-catch. Возможен ли нормальный возврат в тут точку где было выброшено исключение, если оно преодолело несколько уровней обработки, или такое не практикуется?
Напишите, поделитесь опытом о полезности данной конструкции.
Интересно именно мнение живых людей практикующих с++, т.е. ваше..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2011, 13:22     вопрос к опытным программистам
Посмотрите здесь:

Вопрос к опытным програмистам - C++
Ситуация такова, начинаю учить программирование в целом ну и Си++ в частности, как показало множество самостоятельных заданий в книге у...

Вопрос к программистам, имеющим опыт - C++
Прошу прощения - возможно, подобные вопросы задавались много раз. Хотелось бы узнать, как и с чего вы начинали. Расскажите, пожалуйста. ...

Всем программистам! - C++
Нужна ваша помощь! Завтра у меня олимпиада по программированию! так вот мне нужно решить 4 задачи на с++ или паскаль не имеет значения!...

Несколько вопросов к программистам. - C++
Доброго времени суток! я начинающий, последние пару месяцев делал упор на изучение Си, WinAPI и дискретной математики. Наверное, это было...

Экспертам и программистам С++: пройти собеседование и получить работу - C++
прошу напишите список книг по С++,которые реально полезны и необходимы:для того ,чтобы пройти собеседование и получить работу.и что...

Вопрос по массивав, "институтский" вопрос. - C++
Готовлюсь к летней сессии по программированию. С++ Есть такая вот задачка (привожу как есть) В документации подобного не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
13.07.2011, 13:44     вопрос к опытным программистам #2
AzaKendler, Постоянно использую. Очень полезная вещь.
Возврат в ту точку где было выброшено исключение часто нереален. Если исключение произошло по инициативе твоей программы и ты точно знаешь какие последствия оно несет, то ты можешь его залогировать и продолжить работу. Однако чаще приходят исключения непредвиденные, в этом случае можно например переинициализировать объект в котором произошло исключение.
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
13.07.2011, 14:02     вопрос к опытным программистам #3
Вообще-то опыт подсказывает, что для маленьких программулин (Ну, примерно, до 1000 операторов) использование try-catch почти бесполезно. Программа маленкая, ее можно обозреть и так, поэтому применять тяжелую артиллерию (try-catch) смысла мало.
А вот если прога большая, то нужно обработку ошибок-ситуаций ПРОЕКТИРОВАТЬ с самого начала. И потом использовать средства try-catch уже в соответствии с запроектированными решениями, не допуская самодеятельности.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.07.2011, 16:57     вопрос к опытным программистам #4
1. Да, всегда.
2. Не возможно и обычно не нужно.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
14.07.2011, 08:47  [ТС]     вопрос к опытным программистам #5
как на ваш взгляд, стоит ли по максимуму наполнять свой класс, который выбрасывается исключением, информацией? или вы в собственной практике обходитесь большинством стандартных заготовок?
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
14.07.2011, 08:54     вопрос к опытным программистам #6
AzaKendler, Чем больше будет информации, тем точнее сможешь понять причину. Однако если сбои будут происходить часто, то твой лог файл может оказаться например очень большим, что усложнит его пересылку.
CAHTEXHUK
Заблокирован
14.07.2011, 10:10     вопрос к опытным программистам #7
насчёт нормального возврата не знаю, но вернуться можно хоть куда, если сильно захотеть
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
35
36
37
38
39
40
41
42
43
44
void func1()
{
    int adr;
    __asm 
    {
        call $ + 5  // запихнуть в стек адрес след. команды и передать на нее управление
        pop ebx     // вытолкнуть из стека адрес возврата
        mov adr, ebx
    }
 
    
    int a = 70;
    int b = 80;
 
    cout << b - a;
 
    throw adr;
 
}
 
void func2()
{
    int a = 89, b = 54;
    cout << a - b;
    func1();
}
 
 
int main()
{
    try 
    {
        func2();
    }
    catch (int adress)
    {
        __asm 
        {
            call adress
        }
    }
   
   return 0;
}
Добавлено через 2 минуты
как видите, управление возвращается, только там проблема одна - исключение остаётся необработанным, но если ещё сильнее извратиться то и это можно обойти
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 10:59     вопрос к опытным программистам #8
Только вот все переменные, инициализированные до блока асм могут уже быть испорченными. И это требует дополнительного кода (на х64 не работающего).
В любом случае, данный подход не применим, и следующий пример это иллюстрирует.
C++
1
2
3
4
5
6
7
8
9
10
11
12
 try 
        {
                func2();
                func3();
        }
        catch (int adress)
        {
                __asm 
                {
                        call adress
                }
        }
Добавлено через 2 минуты
Цитата Сообщение от AzaKendler Посмотреть сообщение
стоит ли по максимуму наполнять свой класс, который выбрасывается исключением, информацией
Однозначного ответа нет. Чем больше информации, тем удобнее диагностировать и отлаживать. Но чем сложнее класс, тем больше вероятность допустить в нём ошибку. Плюс нужно избегать выделения памяти из кучи (если это требуется, то лучше пул заранее создать), обращения к оборудованию (если исключение сообщает об отказе харда, то пытаться создать лог файл на том же диске, будет не самой лучшей идеей) и т.п.
CAHTEXHUK
Заблокирован
14.07.2011, 11:15     вопрос к опытным программистам #9
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только вот все переменные, инициализированные до блока асм могут уже быть испорченными
это можно исправить
на x64 вобще можно rip читать напрямую не извращаясь со стеком, насколько мне известно
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
14.07.2011, 11:18  [ТС]     вопрос к опытным программистам #10
CAHTEXHUK, идеи интересные. но тут большинство советует что возвращаться не нужно.
а адреса хорошо помещаются в int?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 11:29     вопрос к опытным программистам #11
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
на x64 вобще можно rip читать напрямую не извращаясь со стеком, насколько мне известно
inline ассемблера нету.

Добавлено через 1 минуту
Цитата Сообщение от AzaKendler Посмотреть сообщение
адреса хорошо помещаются в int?
На функции - да. На методы - не очень.) Это если про х86 говорить.
CAHTEXHUK
Заблокирован
14.07.2011, 11:45     вопрос к опытным программистам #12
в программировании этот приём бесполезен, я так привёл пример что возможно и такое. Если крякингом заняться захочешь то полезно уметь распознавать конструкции типа try\catch и уметь с ними работать. Да, в инт как раз помещается на i386
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2011, 12:00     вопрос к опытным программистам
Еще ссылки по теме:

Вопрос по кнопкам в С++ - C++
Подскажите какой параметр дописать в свойствах кнопки, чтобы после ее нажатия она становилась неактивной?

Вопрос по массиву. - C++
Вобщем вопрос такой, существует массив с данными, который медленно но постоянно растёт. Но нужно чтобы элементы к которым давно не...

Вопрос к специалистам - C++
Возможна ли кроссплатформенная реализация приложений написанных на с++ если да то какими средствами её можно достичь. интересует...

Вопрос по деревьям - C++
Имеется структурка: struct tree { char* string; tree* childs; }; Нужно сделать так, чтобы с каждым уровнем количество...


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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 12:00     вопрос к опытным программистам #13
Тогда уж лучше сразу обработчик подменить, раз уж хакерить взялись...
Yandex
Объявления
14.07.2011, 12:00     вопрос к опытным программистам
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru