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

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

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

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

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

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

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

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

Std::ios_base::sync_with_stdio [обращение к опытным] - C++
Читал статью о том на сколько медленный iostream и там упоминалось о std::ios_base::sync_with_stdio позволяющей смешивать iostream & stdio,...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
13.07.2011, 13:44 #2
AzaKendler, Постоянно использую. Очень полезная вещь.
Возврат в ту точку где было выброшено исключение часто нереален. Если исключение произошло по инициативе твоей программы и ты точно знаешь какие последствия оно несет, то ты можешь его залогировать и продолжить работу. Однако чаще приходят исключения непредвиденные, в этом случае можно например переинициализировать объект в котором произошло исключение.
ValeryLaptev
Эксперт С++
1040 / 819 / 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
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 12:00 #13
Тогда уж лучше сразу обработчик подменить, раз уж хакерить взялись...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2011, 12:00
Привет! Вот еще темы с ответами:

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

вопрос к опытным програмистам - HTML, CSS
вопрос такого рода - за сколько вы делаете сайт и какими методами 1. Сайт визитка 2. Сайт Блог 3. Сайт форум 4. Сайт продукции (...

Вопрос к опытным Mac'овцам - Mac OS
Здравствуйте. Прошу посоветовать мне, реальные варианты решения моей задачи, те, что действительно работают, а не &quot;может быть будет...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.07.2011, 12:00
Ответ Создать тему
Опции темы

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