Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 04.09.2005, 23:00   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
запускаем на выполнение.
Как видно в окне отладчика


выполнение программы было прервано на строке
DrawImage image,0,0
Единственное, что приходит на ум - картинка не может быть отображена из-за ошибки
загрузки. О чём, вообще-то, нам и сообщает текст форточки с ошибкой. Проверим значение
хендла image:



Как видно он равен 0. Что и требовалось доказать.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.09.2005, 23:03   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Пример2:
Допустим есть другой бажный кусок кода:

For i=1 To 10
	i=i-1
Next
Простенький цикл выполняется подозрительно долго...
нажмем кнопку



чтобы рассмотреть выполнение каждой инструкции шаг за шагом (см. рисунок ниже).
Как нетрудно заметить: цикл повторяется до бесконечности.
Проанализировав значения, принимаемые переменной i, можно понять в чём заключается
ошибка.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.09.2005, 23:04   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Использование команд
В блитце есть так же команды управления отладкой из тела программы
Stop
Если интерпретатор наткнётся на эту команду он автоматически перейдёт в режим отладки. только у меня (и не только) эта команда сбоит.
DebugLog message
Позволяет добавить команду в DebugLog, который можно просмотреть, выбрав соответствующую
вкладку на панели отладчика.

__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 11.01.2006, 04:17   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
см. также
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 12.01.2006, 10:32   #7
ZanoZa
Элита
 
Регистрация: 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
AsmLover
 
Сообщений: n/a
Тут отладчик вообще ни при чем.
Ты просто загоняешь компьютер в исполнение бесконечного цикла. Строки ниже команды безусловного перехода 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
Guest
 
Сообщений: n/a
P.S. Соврал ) , выполнится команда Еnd при нажатии на ESC. Впрочем, ее можно спокойно удалить.
 
Ответить с цитированием
Старый 12.01.2006, 18:04   #10
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Нет, у меня действительно зависит от отладчика.При включенном debuge не зависает.
А пример я специально кривой написал.
(Offline)
 
Ответить с цитированием
Старый 12.01.2006, 23:31   #11
jimon
 
Сообщений: n/a
у меня почемуто мнение что надо компилировать в стандартном ide без отладчика и с отладчиком... и попробовать скомпилировать в visual blitz

я когда писал декомпилятор для блица - заметил прикол
можете сами даже посмотреть, если компилить стандартным ide, просто компилить... не в exe... а просто так F5 нажать... то ЧАСТИЧНО код переносится в процесс который якобы емулирует запуск exe

в visual ide такого нету ...

тоесть в блице - запустить через F5 и через exe - две разные вещи...
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отладка HolyDel Юмор 12 13.08.2007 01:01
Отладка мк Основной форум 3 13.04.2006 09:12


Часовой пояс GMT +4, время: 14:15.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com