7 / 7 / 1
Регистрация: 11.06.2012
Сообщений: 352
|
|
1 | |
Живучесть проги14.07.2012, 10:00. Показов 3744. Ответов 45
Метки нет (Все метки)
Всем привет...
Вопросов несколько: 1)Допустим у меня должна выполниться процедура (к примеру отправка смс через модем), а он не обнаруживается. И прога встает и выкатывает мне ошибку. С помощью чего мне можно сделать так чтобы если процедура данная не выполняется, то выполняется другая. Слышал что-то про команду TRY, но как работает не знаю??? 2) Теперь если я знаю конкретную ошибку кот мне выдает прога, как мне ее пропустить чтобы прога дальше пошла, ну или выполнить другое действие??? 3) Еще слышал, что если разбивать прогу на ПОТОКИ, то живучесть ее повышается, это как поясните??? ...заранее благодарен...
0
|
14.07.2012, 10:00 | |
Ответы с готовыми решениями:
45
Живучесть SSD Atmega8 USART - живучесть Проверить объект в std::bind на живучесть Установил фотошоп, вместо проги установились другие проги (игры онлайн,браузеры,рекламы и т.д.) |
1390 / 531 / 67
Регистрация: 10.04.2009
Сообщений: 8,734
|
||||||
15.07.2012, 18:32 | 21 | |||||
вот это
0
|
locm
|
15.07.2012, 19:56
#22
|
Не по теме: Да не знаю, но знаю WinAPI. Функция CreateFile() возвращает хэндл открытого файла или -1 если не удалось открыть. В VB ведь можно вызывать WinAPI функции? Тогда в чем проблема? Я намекаю на нормальный ЯП и это не только PureBasic, но и Дельфи, C++ и др. с которыми я имел дело. В них нет таких проблем. Я думал что VB тоже нормальный ЯП но оказалось что это не так, точнее его функции и операторы оставляют желать лучшего и VB не подходит для создания серьезных программ. Может это как раз из-за VB профессиональные программисты хаят бейсик, намекая что он не подходит для создания стабильно работающих программ? Есть! Нужно уберечь потенциальных программистов от быдлокодинга. Из того что я понял из ваших слов, VB категорически не пододит для первого ЯП, т.к. велика вероятность стать быдлокодером! Чему он учит? Тому что нужно очевидные вещи делать через одно место и не проверять возникновение ошибок? Представляете что будет если человек перейдет на нормальный ЯП и тоже забьет на проверку ошибок? Потому что не обучен их проверять! Грош - цена его программам, которые падают от дуновения ветерка!
0
|
15.07.2012, 20:22 | 23 | ||||||||||
Поэтому VB и называют простым языком, что в нем есть такая возможность на все забивать (от ошибок до инициализации переменных).
Но я лично в своих прогах (которые для себя) никогда не использую:
И всегда использую
API, конечно можно, но нужно ли городить тучу кода, если есть встроенный функционал. Предварительно проверить все возможные ошибки перед открытием файла тоже можно, но опять, нужно ли это делать, если ты пишешь в бейсике, что само собой подразумевает писать коротко и быстро и по-проще. А предусматривать ли все возможные ситуации это уже на совести программиста.
0
|
15.07.2012, 21:46 | 24 |
Это где такие "профи" сидят и на PureBasic кодят? В нашем коллективе очень уважительно относятся. Да и привычнее как то в MS Ofice на VBA скрипты писать, а не PureBasic или других нормальных ЯП, с которыми ты дело имел
Нужно научить их пользоваться всеми инструментами данного языка. А on error - это мощный инструмент, если использовать его правильно, как Dragokas например.
1
|
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
|
|
15.07.2012, 22:02 | 25 |
все ЯП для чего то создавлись и, естественно, имеют право быть
каждый вправе выбрать тот или иной язык исходя из своих возможностей ну и от обл.применения. мое мнение, быдлокод и неспользование или подмена возможностей языка - это как бы разные вещи к примеру в аксесе конструкторы создают сплошь и рядом on error из своего опыта: при определении ОДЗ ф-ций я не проверяю корни, логарифмы, знаменатели,... для этого очень удобно (мне) использовать именно встоенный обработчик да и потом уровень ыот этого быдлокодства зависит от уровня автора наверное все через это идут ну и в этом есть позитив, нужно знать как правильно и важно знать как неправильно
0
|
locm
|
|||||
16.07.2012, 00:50
#26
|
|||||
Не по теме: Забить на все можно в любом ЯП, а вот отсутствие нормальной обработки ошибок это ИМХО не простота, а недостаток ЯП. ИМХО так логичнее обрабатывать ошибки.
Но при этом нельзя забывать про стабильность работы программы! Кому нужна программа, написанная на скорую руку, которая вылетает даже без видимых причин для этого? Что вы заладили, PureBasic да, PureBasic? Какое он имеет отношение к этой теме? Я имел в виду вообще программистов, а не только тех, кто пишет на PureBasic. Возьмем к примеру Эдсгера Дейкстра. Вот что он написал про бейсик.
Сообщение от Эдсгера Дейкстра
Пишите на чем хотите, но не учите других быдлокодить!
0
|
Pro_grammer
|
16.07.2012, 06:31
#27
|
Не по теме: Так ты же больше ни чего не знаешь, к сожалению, о чем же ещё с тобой говорить? Кстати, как я понял до версии 4.30 этот оператор (OnErrorResume) тоже был! И на ихнем форуме по PureBasic один из самых грамотных программистов форума был в шоке, когда его убрали :
Сообщение от Пётр
Сообщение от Пётр
Да и ты постоянно с того форума примеры выкладываешь... Так что кто учит быдлокодерству - это ещё вопрос.
0
|
Модератор
|
|
16.07.2012, 07:40 | 28 |
Сообщение было отмечено как решение
Решение
Некоторые итоги:
1) Обработка ошибок в VB достаточно удобна (On Error GoSub, On Error Goto, On Error Resume [next], объект Err), но в современных языках принята еще более удобная концепция (основанная на С++ - подходе - Try/Catch). Впрочем, обе эти концепции (на мой взгляд), не решают главной проблемы: если ошибка все же пропущена (нет обработчика), то пользователю вываливается маловразумительное сообщение об ошибке (типа Error Code=9), ему совершенно непонятное. Но самое смешное в том, что оно и программисту непонятно. Где индекс вышел за границу? В какой процедуре? А писать обработчики для всех ситуаций немыслимо. Это превращает программирование в мУку! Некоторый сервис представляет моя надстройка (см. приложенный файл). Там и подробная инструкция... 2) Дейкстра писал про ОЧЕНЬ старый бэйсик. Не надо передергивать. Современный бэйсик - структурный язык, не уступающий Паскалю.И современным бэйсик-программистам нет необходимости доказывать "неверблюдность". 3) Хороший язык тот, которым ты лучше всего владеешь. Хороший программист обязан знать несколько языков.
3
|
locm
|
16.07.2012, 10:37
#30
|
Не по теме: С чего вы это взяли? Если я в основном отвечаю в разделе форума по PureBasic, это еще не значит что я не знаю других ЯП. Когда кончаются аргументы, не нужно переходить на личности. Будьте мужчиной, не опускайтесь до этого! В этом разделе обсуждают VB. Если так сильно хотите обсудить обработчик ошибок PB, то создайте тему в соответствующем разделе и обсудим.
0
|
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
|
|
16.07.2012, 11:35 | 31 |
locm, Вы извините, но имхо, как бы немножко недоперелет
Вы косвенно уличили в бк уже 3 чел., почему я встряю так сказать., потому, что всех троих я очень хорошо знаю по форуму этому и глубоко уважаю как знающих и воспитанных людей.(У них есть чему учится!) из сего предложение, давайте останемся при своем мнении и прекратим вот это "не в тему"
0
|
locm
|
16.07.2012, 11:38
#32
|
Не по теме: Я никого не уличал в быдлокодерстве. А всего лишь попросил не учить других неправильному программированию. Живучесть проги
0
|
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
|
||||||
16.07.2012, 12:02 | 33 | |||||
ну вот о себе, первые мои попытки написать что то --- это сплошной бк это правда
вплоть до использования Goto для выхода из цикла сегодня я так не делаю, но найдется человек который скажет, что сегодняшний мой код тоже бк, и я ему буду благодарен, если напишет как надо а вообще то тема интересная, но было бы еще интересней, если бы на конкретных примерах тапа
0
|
16.07.2012, 15:00 | 34 | |||||
Я тоже за то, чтобы не быть голословным, а чем-то подкреплять.
Разберем на конкретном примере открытия нескольких файлов и вывода на экран первой строки:
Итак, какие здесь ошибки, и как бы это могло выглядить лучше на другом ЯП? Проанализирую с точки зрения VB: Плюсы: 1. При возникновении любой ошибки программа не выдаст исключения вообщем-то никогда, а покажет обычный MsgBox с информацией о номере и описании ошибки. Также спросит хотим ли мы продолжить работу и спокойно начнет выполнять последующие команды. 2. В обработчике нет безусловных переходов GoTo (универсальность). 3. Реализован флаг - т.о. если файл отсутствует, будут пропущены все последующие команды в цикле, которые иначе тоже начали бы выдавать ошибки. off. 4. Если начнем пользоваться API есть также возврат ошибки Err.LastDllError
Функция GetLastError()
Возвращает код последней ошибки вызывающего потока. С помощью нее можно получить код ошибки при неудачном выполнении API функции. В Visual Basic вместо этой функции используйте Err.LastDllError. Минусы: 5. Обработчик VB не умеет показывать в каком месте кода и какая команда выдала ошибку, а) Хотя для тяжелых случаев можно организовать разбиение на подпрограммы с отдельными обработчиками и модификатором On Local Error б) А если сильно захотеть то видел за бугром и такую библитеку. в) Вариант "Ы". Есть спец. Debug-метод: пронумеровуем каждую строку, получаем позицию ошибки функцией Erl
Erl()
Недокументированная функция Erl(Error line) определяет локальный номер строки, в которой произошла последняя ошибка времени исполнения. Может быть полезной при отладке сложных процедур, в которых по номеру ошибки, выдаваемому объектом Err, сложно определить ее происхождение. Рекомендуется использовать в бета-версиях программ, что позволить узнать места ошибок. Для этого надо включить информацию из нее в каждый обработчик ошибок и перенумеровать все строки внутри процедур (Существуют Add-in, позволяющие перенумеровать все строки) Возвращаемое значение Функция возвращает значение типа Long, содержащее значение номера строки. Локальные номера строк задаются программистом. Если на строке, в которой произошла ошибка, номера не задано, функция возвращает ноль 6. Open не является функцией, поэтому в конкретном куске кода нельзя получить ErrorLevel для анализа. (спорно, что лучше - это или централизированный обработчик). Недоработки программиста: 7. Нет проверки While EOF (если конец файла). Если файл будет пуст - снова ошибка, а ведь этого можно было не допускать - на совести прогера. 8. Недоработка ли? или возможность? : итого по работе с файлом есть вот СТОЛЬКО
52 Bad file name or number. (File Handle already in use)
53 File not found. (File may not exist or probably a typo) 54 Bad File Mode. (Using Input# when File open in Output/Append Mode or using Print#/Write# when File open in Input Mode) 55 File Already Open. (You have forgotten to close the file before opening it again.) 57 Device I/O Error. (Hardware fault. Check your Hard disk.) 58 File already Exists. 59 Bad Record Length. (Only for Random Access Files) 61 Disk Full (No free space on disk drive) 62 Input past end of file. ( A file is being read even after the EOF has been reached. Check if the Eof() Condition is placed and used correctly.) 63 Bad Record Number. (Only for Random Access Files) 67 Too many files at the same time. (Too many files are currently open) 68 Device unavailable. 70 Permission Denied. (Disk is write-protected.) 71 Disk not Ready. 74 Can't rename files across different drives 75 Path/File Access Error 76 Path Not Found.
Товарищи, интересует мнение, как это все реализовано на других языках, на С++ например. Если программист хоть что-нибуть малейшее не предусмотрит из этого большого списка ошибок, то крешиться ли программа на другом ЯП и как от этого уберечься. А как на счет ее "живучести" в среде VB? Стоит ли городить кучу кода для обработчика, если у нас будет огромный проект на VB? Я лично считаю, если для серъезного проекта, то НУЖНО делать проверок сколько возможно. Но не замедлит ли это программу? Или достаточно проверять только самые критические параметры, а на остальное закрывать глаза обработчиком... Не по теме: Спасибо gaw, но я никакой не профи.
0
|
7 / 7 / 1
Регистрация: 11.06.2012
Сообщений: 352
|
|
16.07.2012, 18:08 [ТС] | 36 |
Уважаемые форумчане в Ваш спор не лезу, т.к. еще только учусь всему и очень рад что подсказываете!!!
Что касается проги, очень так сказать уязвима пока!!! И абонент кот. через модем отправляю голосовое сообщение, то занят, то не берет трубку ("нехороший человек"). Так вот вопрос: как запустить типа часов, допустим на 30сек (чтобы абонент наговорился), а потом перейти по метке??? Только чтобы прога шла (засыпания мне НЕ подойдет) и шел отсчет времени???
0
|
16.07.2012, 20:32 | 38 | |||||
Ого сколько ошибок, приводящих к исключениям!
Причем если работать с файлом используя WinAPI, то исключений вообще не будет, несмотря на кучу ошибок. Вот пример (не на VB, но переписать на него несложно).
Врядли на диске C: вашего компа окажется файл с именем testing.txt, поэтому функция CreateFile() не сможет его открыть. Поэтому функция завершится с ошибкой. Я специально не проверяю возникновение ошибки и начинаю работать с файлом. Сначала пишу в него строку, потом выполняю позиционирование, потом читаю, после чего закрываю файл. Еще раз подчеркну, все это делаю с несуществующим файлом и естественно что все эти операции завершаются с ошибкой, но это не приводит к падению программы. Почему VB-программа падает при малейшей ошибке в работе с файлами, это наверное вопрос к М$. Как выяснили, не падает, а просто игнорирует выполнение команд работы с файлами, поскольку файл недоступен. Естественно что функции сообщают об ошибках и с помощью GetLastError() можно получить их номер, но в данной программе для упрощения это не производится.
0
|
16.07.2012, 20:37 | 39 | |||||
Ну да, это моя грубая ошибка.
Между строк 24-25 нужно вставить:
Но то, что ошибка генерируется всегда, в отличие от API - это да. Но эта ошибка и есть своего рода Errorlevel в API, которая не приводит к падению, если используется обработчик. Почитайте хотя-бы эту тему. Не вижу смысла продолжать Вам что-то доказывать.
0
|
1390 / 531 / 67
Регистрация: 10.04.2009
Сообщений: 8,734
|
|
16.07.2012, 20:46 | 40 |
ну а как насчёт того, что проверяя ошибки это быстрее делается, когда много миллионный цикл лучше спровоцировать ошибку обработать её чем цикл лопатить?
0
|
16.07.2012, 20:46 | |
16.07.2012, 20:46 | |
Помогаю со студенческими работами здесь
40
Как отследить из проги на Си завершение другой проги 3 проги по С++ ПРОГИ Проги Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |