Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15

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

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

Студворк — интернет-сервис помощи студентам
напишите пожалуйста, как часто вам приходилось или приходится использовать для обработки ошибок
механизм try-catch. Возможен ли нормальный возврат в тут точку где было выброшено исключение, если оно преодолело несколько уровней обработки, или такое не практикуется?
Напишите, поделитесь опытом о полезности данной конструкции.
Интересно именно мнение живых людей практикующих с++, т.е. ваше..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2011, 13:22
Ответы с готовыми решениями:

Опытным программистам С++
Здравствуйте, я начал изучать С++. Есть определенный план обучения. Например: сначала изучить синтаксис, принцип ООП, контейнеры STL,...

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

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

12
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
13.07.2011, 13:44
AzaKendler, Постоянно использую. Очень полезная вещь.
Возврат в ту точку где было выброшено исключение часто нереален. Если исключение произошло по инициативе твоей программы и ты точно знаешь какие последствия оно несет, то ты можешь его залогировать и продолжить работу. Однако чаще приходят исключения непредвиденные, в этом случае можно например переинициализировать объект в котором произошло исключение.
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
13.07.2011, 14:02
Вообще-то опыт подсказывает, что для маленьких программулин (Ну, примерно, до 1000 операторов) использование try-catch почти бесполезно. Программа маленкая, ее можно обозреть и так, поэтому применять тяжелую артиллерию (try-catch) смысла мало.
А вот если прога большая, то нужно обработку ошибок-ситуаций ПРОЕКТИРОВАТЬ с самого начала. И потом использовать средства try-catch уже в соответствии с запроектированными решениями, не допуская самодеятельности.
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
13.07.2011, 16:57
1. Да, всегда.
2. Не возможно и обычно не нужно.
1
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
14.07.2011, 08:47  [ТС]
как на ваш взгляд, стоит ли по максимуму наполнять свой класс, который выбрасывается исключением, информацией? или вы в собственной практике обходитесь большинством стандартных заготовок?
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
14.07.2011, 08:54
AzaKendler, Чем больше будет информации, тем точнее сможешь понять причину. Однако если сбои будут происходить часто, то твой лог файл может оказаться например очень большим, что усложнит его пересылку.
0
Заблокирован
14.07.2011, 10:10
насчёт нормального возврата не знаю, но вернуться можно хоть куда, если сильно захотеть
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 минуты
как видите, управление возвращается, только там проблема одна - исключение остаётся необработанным, но если ещё сильнее извратиться то и это можно обойти
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 10:59
Только вот все переменные, инициализированные до блока асм могут уже быть испорченными. И это требует дополнительного кода (на х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 Посмотреть сообщение
стоит ли по максимуму наполнять свой класс, который выбрасывается исключением, информацией
Однозначного ответа нет. Чем больше информации, тем удобнее диагностировать и отлаживать. Но чем сложнее класс, тем больше вероятность допустить в нём ошибку. Плюс нужно избегать выделения памяти из кучи (если это требуется, то лучше пул заранее создать), обращения к оборудованию (если исключение сообщает об отказе харда, то пытаться создать лог файл на том же диске, будет не самой лучшей идеей) и т.п.
1
Заблокирован
14.07.2011, 11:15
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только вот все переменные, инициализированные до блока асм могут уже быть испорченными
это можно исправить
на x64 вобще можно rip читать напрямую не извращаясь со стеком, насколько мне известно
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
14.07.2011, 11:18  [ТС]
CAHTEXHUK, идеи интересные. но тут большинство советует что возвращаться не нужно.
а адреса хорошо помещаются в int?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 11:29
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
на x64 вобще можно rip читать напрямую не извращаясь со стеком, насколько мне известно
inline ассемблера нету.

Добавлено через 1 минуту
Цитата Сообщение от AzaKendler Посмотреть сообщение
адреса хорошо помещаются в int?
На функции - да. На методы - не очень.) Это если про х86 говорить.
0
Заблокирован
14.07.2011, 11:45
в программировании этот приём бесполезен, я так привёл пример что возможно и такое. Если крякингом заняться захочешь то полезно уметь распознавать конструкции типа try\catch и уметь с ними работать. Да, в инт как раз помещается на i386
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 12:00
Тогда уж лучше сразу обработчик подменить, раз уж хакерить взялись...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.07.2011, 12:00
Помогаю со студенческими работами здесь

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

Вопрос к опытным раскрутчикам.
Два месяца назад заказал раскрутку своего сайта. Задача - 100 уникальных посетителей в сутки. Из запросов, по которым требовалось...

Вопрос к опытным гуру
В общем краткая история проблемы. Есть сайт. Сайту 3 года примерно. Коммерческий проект, сделанный под свои конкретные задачи. На сайте...

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

Вопрос к опытным: что горит в звуковухах?
Приветствую! У меня нездоровая проблема: горят выходы звуковух. Использую активный спикер, какой-то там дешевый Sven. Вначале...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru