|
FAQ Туториалы и часто задаваемые вопросы |
04.09.2005, 23:00
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Отладка
aka DEBUG
Пример 1:
Допустим у нас есть бажный кусок кода:
Graphics3D 800,600,32
SetBuffer BackBuffer()
image=LoadImage("")
DrawImage image,0,0
End
С отключённым отладочным режимом ничего кроме сообщения об ошибке вы не увидите.
Включаем отладку.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
04.09.2005, 23:02
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
запускаем на выполнение.
Как видно в окне отладчика
выполнение программы было прервано на строке
Единственное, что приходит на ум - картинка не может быть отображена из-за ошибки
загрузки. О чём, вообще-то, нам и сообщает текст форточки с ошибкой. Проверим значение
хендла image:
Как видно он равен 0. Что и требовалось доказать.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
04.09.2005, 23:03
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Пример2:
Допустим есть другой бажный кусок кода:
Простенький цикл выполняется подозрительно долго...
нажмем кнопку
чтобы рассмотреть выполнение каждой инструкции шаг за шагом (см. рисунок ниже).
Как нетрудно заметить: цикл повторяется до бесконечности.
Проанализировав значения, принимаемые переменной i, можно понять в чём заключается
ошибка.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
04.09.2005, 23:04
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Также могут понадобиться кнопки:
1 - вернуться к стандартному выполнению программы
2 - следующий шаг
3 - войти в блок команд (например, в функцию)
4 - выйти из блока
5 - завершение программы
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
04.09.2005, 23:06
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Использование команд
В блитце есть так же команды управления отладкой из тела программы
Если интерпретатор наткнётся на эту команду он автоматически перейдёт в режим отладки. только у меня (и не только) эта команда сбоит.
Позволяет добавить команду в DebugLog, который можно просмотреть, выбрав соответствующую
вкладку на панели отладчика.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
11.01.2006, 04:17
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
12.01.2006, 10:32
|
#7
|
Элита
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений (для 252 пользователей)
|
Graphics 800,600,16,2
.start
x=1
Repeat
Cls
x=x+1
x=y^2
Goto start
Text 10,10,x
Flip
Until KeyHit(1)
End
с debug enabled комп тормозит.
Если отключить комп зависает(у меня) примерно на минут 10 + компьютор жалобно писчит, и курсор застывает на месте!
|
(Offline)
|
|
12.01.2006, 14:34
|
#8
|
|
Тут отладчик вообще ни при чем.
Ты просто загоняешь компьютер в исполнение бесконечного цикла. Строки ниже команды безусловного перехода GOTO никогда не выполнятся, поэтому требуется вмешательство по принудительному останову программы. То есть твоя программа на самом деле такая:
Graphics 800,600,16,2
.start
x=1
Repeat
Cls
x=x+1
x=y^2
Goto start
Forever
Я просто добавил комплементарную пару к Repeat (т.е. Forever), чтобы программа работала.
Крайне редко бывает смысл входить в бесконечный цикл без возможности выхода из него. В данном случае смысла нет никакого, поэтому добавим возможность в теле бесконечного цикла выход пор нажатию клавиши ESC:
Graphics 800,600,16,2
.start
x=1
Repeat
Cls
x=x+1
x=y^2
If KeyHit(1) End
Goto start
Forever
Теперь все будет работать и не виснуть. И от отладчика это не зависит.
Отладчик просто добавляет в исполняемый файл дополнительную информацию - таблицы с символьными именами функций и переменных, номера исходных строк и некоторую другую.
Пара замечаний по коду г-на Zanoza.
На Ассемблере такие конструкции встречаются очень часто. Но на языках высокого уровня их надо избегать, если Вы не представляете точно, чего хотите добиться от программы. Если необходимо программным способом выйти из цикла или блока, то в Блитце есть специальная команда EXIT, корректно выводящая на верхний уровень вложенности (то есть если у Вас три вложенных цикла, например, то для выхода в основное тело программы нужно использовать EXIT в каждом цикле). Это связано с тем, что можно попасть в ситуацию, когда итоговый ассемблерный код цикла реализован не c помощью метки входа и команд условного или безусловного перехода на эту метку, а через запоминание на стеке адреса первой команды после цикла и перехода на него командой возврата после завершения работы цикла, восстанавливающей исходное состояние стека. В последнем случае при выходе из тела цикла из его середины на стеке останется лишнее значение, что наверняка приведет к краху программы.
Но поскольку в исходном коде пересекаются два цикла :
.start .... GOTO start и
Repeat .... Until KeyHit(1),
то пришлось бы использовать Exit два раза. Проще в данном случае включить проверку на нажати ESC перед входом в цикл.
Поэтому свой очень полезный код г-н Zanoza должен был написать так:
Graphics 800,600,16,2
.start
x=1
While Not KeyHit(1)
Cls
x=x+1
x=y^2
Goto start
Text 10,10,x
Flip
Wend
End
Разумеется, и в этом случае команды после Goto никогда не выполнятся (слава Богу, автор не так много кода сгенерировал после этого - спасибо за это).
|
|
|
12.01.2006, 14:39
|
#9
|
|
P.S. Соврал ) , выполнится команда Еnd при нажатии на ESC. Впрочем, ее можно спокойно удалить.
|
|
|
12.01.2006, 18:04
|
#10
|
Элита
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений (для 252 пользователей)
|
Нет, у меня действительно зависит от отладчика.При включенном debuge не зависает.
А пример я специально кривой написал.
|
(Offline)
|
|
12.01.2006, 23:31
|
#11
|
|
у меня почемуто мнение что надо компилировать в стандартном ide без отладчика и с отладчиком... и попробовать скомпилировать в visual blitz
я когда писал декомпилятор для блица - заметил прикол
можете сами даже посмотреть, если компилить стандартным ide, просто компилить... не в exe... а просто так F5 нажать... то ЧАСТИЧНО код переносится в процесс который якобы емулирует запуск exe
в visual ide такого нету ...
тоесть в блице - запустить через F5 и через exe - две разные вещи...
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
отладка |
HolyDel |
Юмор |
12 |
13.08.2007 01:01 |
Отладка |
мк |
Основной форум |
3 |
13.04.2006 09:12 |
Часовой пояс GMT +4, время: 08:52.
|