Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37

Отладчик работает не так как казалось бы должен

05.05.2015, 12:19. Показов 4032. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу объяснить, почему отладчик работает не так как казалось бы должен. Т.е. привожу для примера такой код:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
; Создаём окно.
 OpenWindow(1,150,200,200,100,"Заголовок окна",#PB_Window_MinimizeGadget)
 CreateGadgetList( WindowID(1) ) ; Создаём пустой список гаджетов.
 ButtonGadget(2,50,30,80,25,"Кнопка")
 
 Repeat ; Начало главного цикла.
 Event=WaitWindowEvent() ; Получаем идентификатор события.
 Gadget=EventGadget() ; Узнаём идентификатор активного гаджета.
  If Event=#PB_Event_Gadget And Gadget=2 ; Условие будет выполнено при щелчке по кнопке.
    MessageRequester("Сообщение","Была нажата кнопка") ; Выводим на экран сообщение.
   EndIf 
  Until Event = #PB_Event_CloseWindow ; Прерываем цикл при закрытии окна
  
  End ; Директива, завершающая программу.
Я устанавливаю точку останова в 3 строке затем запускаю программу для симуляции. И что наблюдаю. После выполнения 2 строки появляется основное окно программы. Казалось бы, что после выполнения 4 строки должна была бы появиться кнопка в основном окне программы. Но я её не вижу. И сколько бы я не делал шагов кнопка так и не появляется. Почему?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2015, 12:19
Ответы с готовыми решениями:

Собрал пк но он не работает так как должен
Комплектующие: AMD FX 8320 GTX 660 m5a97 r2.0 8 ОЗУ 4х4 Суть в том что я играю 2 игры всего лишь. Дота 2, CS:GO - вот например...

График параболы в окне не выводится (а, казалось бы, должен)
.386 .model flat,stdcall option casemap:none WinMain proto :DWORD,:DWORD,:DWORD,:DWORD include \masm32\include\windows.inc ...

На ПК интернет работает так, как и должен, как я подключил интернет к ноутбуку скорость упал на несколько раз
и пинг в играх от 500 до 1000 доходит. На сайтах тоже грузит долго.На вирус проверял не нашел.Интернет кабельный 10 Мбит/с с адаптером...

40
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
06.05.2015, 10:46  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Не пишите ерунду, лучше изучите матчасть, к примеру, что это за файл создается с именем PureBasic_Compilation0.exe?
Я просто высказал предположение. А Вы мне учи матчасть. Если бы все так предлагали решать возникшие проблемы, то зачем форумы?
Цитата Сообщение от Pro_grammer Посмотреть сообщение
К чему эти гнусные инсинуации, не подтвержденные на практике реальными примерами?
Что положено делать отладчику он делает, остальное ваши хотелки, противоречащие принципам работы системы.
Я не утверждал этого, а просто провел аналогию с непоявляющимися гаджетами при пошаговой симуляции.
Да, скорее всего отладчик выполняет все что должен выполнять отладчик, но тогда не надо пытаться симулировать работу программы.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,040
Записей в блоге: 7
06.05.2015, 10:59
Цитата Сообщение от vladh Посмотреть сообщение
А Вы мне учи матчасть.
Совет был дан правильный. Потому что вы не спрашиваете как оно работает, а утверждаете что работает не так как вам хочется. Поэтому нужно изучить работу окон в винде и тогда все поймете сами. Хотелки это конечно хорошо, но для их реализации потребуется вносить изменения в операционную систему. Попросите у майкрософта исходники винды, измените их под ваши хотели и получите желаемый результат.

Цитата Сообщение от vladh Посмотреть сообщение
Да, скорее всего отладчик выполняет все что должен выполнять отладчик, но тогда не надо пытаться симулировать работу программы.
А не приходило в голову что программа при пошаговом выполнении может работать не так как при обычном? Ведь программа не одна на компе и выполняется под управлением операционной системы и она ждет от программы ответов на свои запросы, но из-за остановки программы их нет.
Программа не симулируется, а просто выполняется очень медленно.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 11:19
Цитата Сообщение от vladh Посмотреть сообщение
Для того чтобы обрабатывалось событие связанное с этой кнопкой надо вначале нарисовать эту кнопку!
Читай до просветления:
Цитата Сообщение от The trick Посмотреть сообщение
Отрисовка имеет самый низкий приоритет и поэтому всегда выполняется в самом конце, когда в очереди нет больше сообщений.
Цитата Сообщение от vladh Посмотреть сообщение
Просто отладчик в этой программе представлен с претензией и на симуляцию работы программы. Но это не работает. Пусть бы он не пытался выводить окно разрабатываемой программы. Просто бы выводил указатель обрабатываемой строки, состояние переменных, регистров. И тогда у меня бы не возникло вопросов.
Покажи отладчик такого же типа который делает как хочешь ты. Отладчик работает совершенно верно, как и любой другой отладчик такого типа (OllyDbg к примеру).

Добавлено через 3 минуты
Цитата Сообщение от locm Посмотреть сообщение
Хотелки это конечно хорошо, но для их реализации потребуется вносить изменения в операционную систему.
Необязательно, к примеру VB6 корректно отображает окна, но там другой принцип работы. Такую функциональность можно было сделать и на PB, но смысла в ней не будет.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,040
Записей в блоге: 7
06.05.2015, 11:23
Цитата Сообщение от The trick Посмотреть сообщение
Необязательно, к примеру VB6 корректно отображает окна, но там другой принцип работы.
Там много кода скрыто от программиста в т. ч. обработчик событий окон, в отличие от PB где нет скрытого кода.
0
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
06.05.2015, 11:28  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Совет был дан правильный. Потому что вы не спрашиваете как оно работает,..
Уж если бы я спросил как оно работает, то скорее бы получил этот совет. Я этого не утверждал, но предполагал, что работа симулятора должна быть другой. Все мне здесь говорят о сложной и замысловатой работой окон а ОС. Но вот я беру и помещаю в любом месте программы подобную первой строку - OpenWindow(0,150,200,200,100,"Заголовок окна",#PB_Window_MinimizeGadget) , но с измененными параметрами размещения и размера. Запускаю с отладчиком и он отрисовывает эти окна оперативно, как просили.
Или другой пример. Я уже говорил, что я пишу изредка программы для МК и отлаживаю их в Протеусе. Так вот там все отрисовывается оперативно, хотя ситуация аналогична.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 11:34
Цитата Сообщение от locm Посмотреть сообщение
Там много кода скрыто от программиста, в отличие от PB где нет скрытого кода.
Это не причем. Там P-код, который неэквивалентен Native-коду в плане отладки. Процессор работает независимо от того "стоит" ли код или нет, события своевременно обрабатываются рантаймом. Также при каждом событии проверяется EbMode (режим работы) и если код приостановлен, то события не передаются в пользовательскую процедуру. Это дает возможность корректно отображать окна, но с этим подходом мы значительно теряем в производительности, поэтому приложения обычно компилируют в Native-код, который работает аналогично как PB.
0
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
06.05.2015, 11:34  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Необязательно, к примеру VB6 корректно отображает окна, но там другой принцип работы. Такую функциональность можно было сделать и на PB, но смысла в ней не будет.
Вот и Вы признали, что другие программы-отладчики могут работать как надо.
И потом, сейчас уже, по моему, идет почти бесполезное обсуждение ситуации. Все говорят, что да, так работает отладчик PB. Но нам этого хватает(а мне правда мало). Но есть другие программы, работа их отладчиков может удовлетворить и более требовательных пользователей. Наверное теперь все ясно с этим вопросом.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 11:42
Цитата Сообщение от vladh Посмотреть сообщение
Вот и Вы признали, что другие программы-отладчики могут работать как надо.
Это работа интерпретатора, а в PB работа компилятора. Отладку интерпретируемого кода можно изменить как угодно (что мы и наблюдаем в VB6), но этим мы значительно теряем в производительности, обработки ошибок и т.п. Именно поэтому сложные программы на VB6 я отлаживаю со скомпилированным кодом в OllyDbg. Это не как надо, мы на VB6 не можем отлаживать многопоточные программы и любой Acess violation убъет среду. В PB такого не будет.

Добавлено через 3 минуты
Цитата Сообщение от vladh Посмотреть сообщение
OpenWindow(0,150,200,200,100,"Заголовок окна",#PB_Window_MinimizeGadget) , но с измененными параметрами размещения и размера. Запускаю с отладчиком и он отрисовывает эти окна оперативно, как просили.
Это окна верхнего уровня и обработка некоторых сообщений для них выполняет система. На счет позиции это распространяется на все контролы также, а не только на окна верхнего уровня.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,040
Записей в блоге: 7
06.05.2015, 11:47
Цитата Сообщение от vladh Посмотреть сообщение
Но нам этого хватает(а мне правда мало)
Объясните зачем при пошаговом выполнении видеть как создаются кнопки и др. контролы в окнах?
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 11:47
Цитата Сообщение от vladh Посмотреть сообщение
Я уже говорил, что я пишу изредка программы для МК и отлаживаю их в Протеусе. Так вот там все отрисовывается оперативно, хотя ситуация аналогична.
При чем тут работа МК и работа системы? Понятное дело что код эмулируется и в реальности это тот-же P-Code который выполняет виртуальная машина. Там брейкпоинт влияет только на код программы в МК, а не на работу системы. Вот тебе гипотетический пример. К примеру ты разработал оконную систему на МК, и если ты теперь поставишь в протеусе брейкпоинт, твоя гипотетическая система зависнет также.
0
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
06.05.2015, 11:58  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Объясните зачем при пошаговом выполнении видеть как создаются кнопки и др. контролы в окнах?
я сейчас делаю свои первые шаги в этой среде, поэтому многие прочитанные вещи я закрепляю через непосредственную работу программы. Вот в примере моего кода я хочу проверить, что произойдет когда я нажму на кнопку? А кнопки то нет.
Цитата Сообщение от The trick Посмотреть сообщение
При чем тут работа МК и работа системы? Понятное дело что код эмулируется и в реальности это тот-же P-Code который выполняет виртуальная машина. Там брейкпоинт влияет только на код программы в МК, а не на работу системы. Вот тебе гипотетический пример. К примеру ты разработал оконную систему на МК, и если ты теперь поставишь в протеусе брейкпоинт, твоя гипотетическая система зависнет также.
А программа то не виснет. Зависанием программы обычно считается такая ситуация при, которой программу нельзя прекратить её же средствами. здесь же таких признаков нет.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 12:06
Цитата Сообщение от vladh Посмотреть сообщение
А программа то не виснет.
Это эмуляция. Я тебе привел аналогию с системой написаной на МК.
Цитата Сообщение от vladh Посмотреть сообщение
здесь же таких признаков нет.
Ну так программа не при чем (Протеус). К примеру повесь на внешнее прерывание (к примеру INT0/INT1 для AVR), напиши цикл:
Assembler
1
2
START:
    rjmp START
И создай обработчик перерывания INT0/INT1. Теперь поставь на rjmp START брейкпоинт чтобы программа остановилась на этой инструкции. А теперь инициируй внешнее прерывание INT0/INT1. Что у тебя начинает сразу же работать обработка прерывания? Тоже самое и в винде.
Цитата Сообщение от vladh Посмотреть сообщение
Вот в примере моего кода я хочу проверить, что произойдет когда я нажму на кнопку?
Пока кнопка не обработает нажатие ничего не произойдет, но она не может его обработать т.к. код остановлен.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,040
Записей в блоге: 7
06.05.2015, 12:15
Цитата Сообщение от vladh Посмотреть сообщение
Вот в примере моего кода я хочу проверить, что произойдет когда я нажму на кнопку? А кнопки то нет.
Программа выполняется пошагово и между шагами полностью остановлена. Нажатие на кнопку в окне ни к чему не приведет, по крайней мере пока программа "дошагает" до обработки события кнопки.
0
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
06.05.2015, 12:21  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Ну так программа не при чем (Протеус). К примеру повесь на внешнее прерывание (к примеру INT0/INT1 для AVR), напиши цикл:
Код ASM
1
2
START:
rjmp START
И создай обработчик перерывания INT0/INT1. Теперь поставь на rjmp START брейкпоинт чтобы программа остановилась на этой инструкции. А теперь инициируй внешнее прерывание INT0/INT1. Что у тебя начинает сразу же работать обработка прерывания? Тоже самое и в винде.
Пример не корректный. На мой взгляд это совсем другая ситуация.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 12:23
Цитата Сообщение от vladh Посмотреть сообщение
Пример не корректный.
Пример корректный. Аналогия: событие-прерывание. И прерывание не будет обработано если процессор не выполняет инструкции. Тоже самое с событиями в винде.
0
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
06.05.2015, 12:30  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Программа выполняется пошагово и между шагами полностью остановлена. Нажатие на кнопку в окне ни к чему не приведет, по крайней мере пока программа "дошагает" до обработки события кнопки.
Во первых кнопки в окне нет - нажимать нечего. А вот я сейчас попробовал в VB там работает.

Добавлено через 4 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Пример корректный. Аналогия: событие-прерывание. И прерывание не будет обработано если процессор не выполняет инструкции. Тоже самое с событиями в винде.
Вы вначале должны настроить МК на обработку прерываний, т.е. сказать ему что прерывания возможны и в случае их возникновения надо идти туда то и делать то то. И тогда Ваш цикл может быть всегда прерван.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 12:32
Цитата Сообщение от vladh Посмотреть сообщение
Во первых кнопки в окне нет - нажимать нечего.
Я уверен - кнопка есть, ты можешь нажать в месте расположения кнопки мышью, а далее запустить программу на выполнение в обычном режиме - события должны обработаться. Возможно конечно кнопка еще и скрыта, т.к. я не имею ни PB ни компилятора, ни EXE файла.
Цитата Сообщение от vladh Посмотреть сообщение
А вот я сейчас попробовал в VB там работает.
Там совершенно другой принцип работы, я уже написал. Ты попробуй скомпилируй программу, а потом пробуй отлаживать ее в OllyDbg - будешь наблюдать тоже самое.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,040
Записей в блоге: 7
06.05.2015, 12:33
Цитата Сообщение от vladh Посмотреть сообщение
А вот я сейчас попробовал в VB там работает.
Попробуйте как предложил The trick.
Цитата Сообщение от The trick Посмотреть сообщение
Именно поэтому сложные программы на VB6 я отлаживаю со скомпилированным кодом в OllyDbg.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
06.05.2015, 12:38
Цитата Сообщение от vladh Посмотреть сообщение
Вы вначале должны настроить МК на обработку прерываний, т.е. сказать ему что прерывания возможны и в случае их возникновения надо идти туда то и делать то то. И тогда Ваш цикл может быть всегда прерван.
Это пример, само-собой нужно разрешить прерывания вообще и прерывания INT0/INT1, это должно быть само-собой разумеющееся. Также я ничего не писал про SPL/SPH - это ты должен делать сам. Естественно я тебе не буду тут писать статью как обрабатывать прерывания, т.к. это пример не для этого. Если тебе нужно и ты разбираешься в контроллерах - ты знаешь как это сделать. Насчет прерывания цикла - цикла не будет если у тебя стоит брейкпоинт в теле цикла и соответственно прерывать нечего.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,040
Записей в блоге: 7
06.05.2015, 12:42
Цитата Сообщение от The trick Посмотреть сообщение
Это не причем. Там P-код, который неэквивалентен Native-коду в плане отладки.
Имел в виду что поскольку обработчик событий окон скрыт, события могут обрабатываться при каждом шаге. А между шагами, окно конечно "повиснет".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2015, 12:42

Отладчик - как сделать так чтобы в качестве значений отоборажались НЕ Синонимы
Доброй ночи уважаемые форумчане !!! Прошу помощи у гуру ... Есть ли какая настройка чтобы при вычислении выражения в отладчике - в...

Казалось бы простой запрос, а не работает!
Здравствуйте! Тема очень простая на первый взгляд. У меня есть таблица: id user_id 1 5 2 5 3 8 4 8 5 8...

Казалось бы, эквивалентные if, но один работает, а второй нет
Добрый день! Пишу свое посимвольное сравнение (условия задачи не позволяют equalsIgnoreCase применять). Проблема в том, что при сравнении...

Не строит как должен, или делаю что-то не так?
Господа, столкнулся с задачей. Необходимо решить уравнение, на рисунке оно (10) и построить на основании решения график зависимости (дельта...

Объект перемещается не так как должен - подскажите где ошибка
По идее, квадрат должен двигаться вправо-вниз, но двигается во влево вниз. В чём может быть причина? float x = 0; float y = 0; ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru