методы отлова ошибок из VB6 to PWB

Раздел посвящен программированию с использованием Power Basic.
spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 13.08.2011 (Сб) 20:22

Я программирую в VB60. И у меня сложилась своя система отлова ошибок. В частности не использую встроенные отладочные функции (точки останова и. т.д). Чаще всего, предполагаю ошибку, вставляю оператор STOP или IF ...STOP,и подвожу курсор к нужной переменной для определения ее значения и.т.д.
Как можно в PWBASIC это делать. Например, останов,вывод информации и завершение программы.
Т.е пример-код.
Спасибо.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 14.08.2011 (Вс) 3:17

spamjokester писал(а):Я программирую в VB60. И у меня сложилась своя система отлова ошибок. В частности не использую встроенные отладочные функции (точки останова и. т.д). Чаще всего, предполагаю ошибку, вставляю оператор STOP или IF ...STOP,и подвожу курсор к нужной переменной для определения ее значения и.т.д.
Как можно в PWBASIC это делать. Например, останов,вывод информации и завершение программы.
Т.е пример-код.
Спасибо.


Используй отладчик, PB в отличие от VB, компилятор. Поэтому никаких STOP здесь быть не может.

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 14.08.2011 (Вс) 17:10

Я не пользуюсь отладчиками. STOP сильно и не нужен. Ну а вывод информации и завершение программы ?
А возможно,в PWBASIC включить отладку OVERFLOW,так,чтобы можно проверить программу в этом режиме.
Или же проверка такого рода ошибок возлагается на пользователя.

Также интересно, обнаружил такую заморочку в режиме #DEBUG ERROR ON

global x_ptr as integer ptr
dim x (129 to 145) as global: x_ptr=VARPTR(x(0))
x(129)=1
msgbox str$(@x_ptr[129])
Если человек адаптирует свою программу из VB60,и привык к массивам не с 0,
то это конечно не приятно,поскольку без режима #DEBUG ERROR ON все работает,
но при включении получается белиберда. Поскольку указатели начинают обращаться не туда,
и программа завершится аварийно. В режиме #DEBUG ERROR ON,работает правильно,если
массив объявляется с 0 dim x(0 to 145).
Т.е. Если я правильно понял, в этом случае придется временно объявлять все массивы с 0 ?
Все это немного раздражает,поскольку какой только информации в HELP нет,а то что нужно того нет.
Неужели нельзя, предусмотреть авторам,c чем может столкнуться пользователь при адаптации программы с VB60

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: методы отлова ошибок из VB6 to PWB

Сообщение FireFenix » 14.08.2011 (Вс) 17:13

spamjokester писал(а):Неужели нельзя, предусмотреть авторам,c чем может столкнуться пользователь при адаптации программы с VB60

Почему автора должны что-то придумывать для совместимости с другими продуктами, не являющимися их собственностью?
И почему перед переходом на другой язык, пользователь не ознакамливается с документацией нового языка, а делает как ему хочется?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 14.08.2011 (Вс) 17:25

FireFenix
(Почему автора должны что-то придумывать для совместимости с другими продуктами)
Дело в том,что PWB это BASIC. Переход с VB60 как раз в HELP уделено особое внимание.
Только,в документации я лично не видел таких разделов,где это предупреждалось, предусматривалось.
А ведь это можно было продумать,а то приходится догадываться.
Но меня интересует больше отладка а не эта тема.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.08.2011 (Вс) 22:15

spamjokester писал(а):
Код: Выделить всё
global x_ptr as integer ptr
dim x (129 to 145) as global: x_ptr=VARPTR(x(0))
x(129)=1
msgbox str$(@x_ptr[129])

А взять адрес начального элемента и вычесть из него соответствующее число байт - не вариант?

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 14.08.2011 (Вс) 23:53

Тут основная не приятность в том,что человек,после подключения отладки,может подумать, что в программе какие то ошибки,и причину можно искать долго.
Я уже сказал,можно сделать массивы,которые >0 в ноль,те что <0 не нужно.
Обращение к массивам в этом режиме не имеет не каких проблем,ничего не надо вычислять.
Речь идет о указателях на массивы с начальным индексом >0. Просто получается (как я понимаю) адрес не того участка памяти.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 15.08.2011 (Пн) 6:57

spamjokester писал(а):global x_ptr as integer ptr
dim x (129 to 145) as global: x_ptr=VARPTR(x(0))
x(129)=1
msgbox str$(@x_ptr[129])


Этож сколько надо выкурить, чтобы такое написать? :D

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 16.08.2011 (Вт) 10:02

Какое именно )). Это просто тест в режиме #DEBURG ERROR ON

#COMPILE EXE
#DIM ALL
'#DEBUG ERROR ON
GLOBAL x_ptr AS INTEGER PTR
FUNCTION PBMAIN () AS LONG

DIM x(129 TO 145) AS GLOBAL INTEGER:x_ptr=VARPTR(x(0))
MSGBOX STR$(@x_ptr[129])

END FUNCTION
=0
Без режима=1

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 16.08.2011 (Вт) 10:03

x(129)=1 забыл.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 10:37

spamjokester писал(а):Какое именно


Твой первый код я имел ввиду.

Код: Выделить всё
dim x (129 to 145) as global 
- это что за тип такой global ?
И далее по-коду почему обращаешься за границы объявленного массива?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 10:44

spamjokester писал(а):Какое именно )). Это просто тест в режиме #DEBURG ERROR ON

#COMPILE EXE
#DIM ALL
'#DEBUG ERROR ON
GLOBAL x_ptr AS INTEGER PTR
FUNCTION PBMAIN () AS LONG

DIM x(129 TO 145) AS GLOBAL INTEGER:x_ptr=VARPTR(x(0))
MSGBOX STR$(@x_ptr[129])

END FUNCTION
=0
Без режима=1


Почему
Код: Выделить всё
x_ptr=VARPTR(x(0))
, а не
Код: Выделить всё
x_ptr=VARPTR(x(-10000))
или
Код: Выделить всё
x_ptr=VARPTR(x(32768))
?

Было бы намного круче! :mrgreen:
Все таки рекомендую купить и прочитать книгу по-программированию для начинающих.

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 16.08.2011 (Вт) 11:04

Ну так,адаптация с Public (VB60). Конечно не тип,просто думал,что смысл в сути а не как записано.
Я просто так всегда,integer понятно.
Пока,пытаюсь свой код адаптировать с минимальными изменениями. в зависимости,что показывают тесты.
Тест показывает, что одномерные указатели на массив с индексом >0,могут работать (DEBUG=OFF).
Если в смысле x_ptr=VARPTR(x(129)) ?
x(129)=1
Индексы не совпадают, работает @x_ptr[0],@x_ptr[1].
Но у меня,огромное число массивов-указателей,мне надо совпадение,никакое смещение и.т.д. не подходит,это накладно.

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 16.08.2011 (Вт) 11:16

Я же уже писал. Что пишу DLL для VB60. Там в HELP,указано,что массивы надо передавать для указателей с 0,x(0),x(0,0).
И они все работают без DEBURG,потому что DLL c указателями или работает или НЕТ. Отсюда и я привык 0.
Поэтому и пушу, с чем можно столкнуться с точки зрения...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 11:26

spamjokester - надеюсь ты понимаешь, что обращение за границы продекларированного массива это ошибка?
То что компилятор не стучит тебе по-голову объясняется тем, что проверка выхода за границы слишком накладна, и применяется она только в простейших языках для начинающих типа VB.

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 16.08.2011 (Вт) 11:41

При обращении указателей к не верному адресу,программа завершится в скором времени. А она показывает правильное значение.
Может,это исключение,и она знает куда обращаться.))

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 11:44

spamjokester писал(а):При обращении указателей к не верному адресу,программа завершится в скором времени. А она показывает правильное значение.
Может,это исключение,и она знает куда обращаться.))


Не завидую пользователям твоих программ, впрочем при таком отношении к делу их и не будет.

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: методы отлова ошибок из VB6 to PWB

Сообщение spamjokester » 16.08.2011 (Вт) 12:47

Меня бы, больше интересовали способы выявления ошибок в PWB.). Вот адаптирую большую программу. Но приходится изменять некоторые участки.
А значит не исключена ошибка OVERFLOW, значением для вычислений может стать какой то 'мусор'. И его трудно искать.
Неужели PWB не дает возможность 'проверки такого режима'. Или дает ?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 13:22

spamjokester писал(а):А значит не исключена ошибка OVERFLOW, значением для вычислений может стать какой то 'мусор'. И его трудно искать. Неужели PWB не дает возможность 'проверки такого режима'. Или дает ?


Не дает, впрочем как и любой другой компилятор.

Note: PowerBASIC does not trap numeric overflow or underflow errors in equation and expression evaluation.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: методы отлова ошибок из VB6 to PWB

Сообщение Хакер » 16.08.2011 (Вт) 13:33

jangle писал(а): применяется она только в простейших языках для начинающих типа VB.

Jangle, прекрати писать хрень.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 13:52

Хакер писал(а):
jangle писал(а): применяется она только в простейших языках для начинающих типа VB.

Jangle, прекрати писать хрень.


В чем хрень?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: методы отлова ошибок из VB6 to PWB

Сообщение Хакер » 16.08.2011 (Вт) 13:54

Во всём. В том, что указанное применяется только в простейших языках (это неправда). В том, что VB является простейшим языком. В том, что VB является языком для начинающих.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 14:01

Хакер писал(а):Во всём. В том, что указанное применяется только в простейших языках (это неправда). В том, что VB является простейшим языком. В том, что VB является языком для начинающих.


Ну тогда скажем в высокопроизводительных языках, Java не простой и запутанный, но все равно медленный интерпретатор.
Есть единственный стандарт языков в программировании это С/С++, а там проверки границ массива нет.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: методы отлова ошибок из VB6 to PWB

Сообщение Хакер » 16.08.2011 (Вт) 14:05

Их там нет, потому что они там технически быть не могут, потому что массивы сделаны как легковесная тонкая обёртка над арифметикой с указателями.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 14:12

Хакер писал(а):Их там нет, потому что они там технически быть не могут, потому что массивы сделаны как легковесная тонкая обёртка над арифметикой с указателями.


Они там не нужны. Профессиональному программисту проверка границы массива только мешает. Но в случае топикстартера такая проверка нужна, тогда бы он не постил откровенно неправильный код. Поэтому ему нужны языки программирования "с костылями" для новичков. Но быстро на них бегать не получится.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: методы отлова ошибок из VB6 to PWB

Сообщение iGrok » 16.08.2011 (Вт) 17:15

jangle писал(а):Они там не нужны. Профессиональному программисту проверка границы массива только мешает.

Надеюсь, у тебя есть письмо от Страуструпа с его личной подписью, где он тебе об этом сообщил?

jangle писал(а):Есть единственный стандарт языков в программировании это С/С++

Толсто. Очень.
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 18:10

iGrok писал(а):Толсто. Очень.


Что толсто?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: методы отлова ошибок из VB6 to PWB

Сообщение iGrok » 16.08.2011 (Вт) 21:54

Троллишь толсто.
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: методы отлова ошибок из VB6 to PWB

Сообщение jangle » 16.08.2011 (Вт) 23:06

iGrok писал(а):Троллишь толсто.


Это ты троллишь. Причем глупо. MS VС++ единственный возможный инструмент для профессиональной разработки в настоящее время.
Например в моей организации используется VS2008. Скажи чем заменить тут C++ если контора создает КИС и тренажеры содержащие 2D/3D графику?
При этом приходится работать с OpenGL и Direct3D, с шейдерами Cg/HLSL/GLSL, использовать 3DS MAX SDK, юзать STL и boost и просто asm, в добавок кучу тулз типа VTune или AMD Codeanalyst. Какой инструмент можно использовать кроме MSVC++?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.08.2011 (Вт) 23:08

jangle писал(а):применяется она только в простейших языках для начинающих типа VB.

А Java, C# и VB.NET - тоже "простейшие языки для начинающих"?

jangle писал(а):Профессиональному программисту проверка границы массива только мешает.

Убеди-ка в этом Microsoft :mrgreen:

jangle писал(а):Но в случае топикстартера такая проверка нужна, тогда бы он не постил откровенно неправильный код.

И что же в нём неправильного?

След.

Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList