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

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

05.05.2015, 12:19. Показов 3868. Ответов 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
Эксперт по электронике
6583 / 3210 / 335
Регистрация: 28.10.2011
Сообщений: 12,537
Записей в блоге: 7
06.05.2015, 10:59
Цитата Сообщение от vladh Посмотреть сообщение
А Вы мне учи матчасть.
Совет был дан правильный. Потому что вы не спрашиваете как оно работает, а утверждаете что работает не так как вам хочется. Поэтому нужно изучить работу окон в винде и тогда все поймете сами. Хотелки это конечно хорошо, но для их реализации потребуется вносить изменения в операционную систему. Попросите у майкрософта исходники винды, измените их под ваши хотели и получите желаемый результат.

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

Добавлено через 3 минуты
Цитата Сообщение от locm Посмотреть сообщение
Хотелки это конечно хорошо, но для их реализации потребуется вносить изменения в операционную систему.
Необязательно, к примеру VB6 корректно отображает окна, но там другой принцип работы. Такую функциональность можно было сделать и на PB, но смысла в ней не будет.
0
Эксперт по электронике
6583 / 3210 / 335
Регистрация: 28.10.2011
Сообщений: 12,537
Записей в блоге: 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 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
Эксперт по электронике
6583 / 3210 / 335
Регистрация: 28.10.2011
Сообщений: 12,537
Записей в блоге: 7
06.05.2015, 11:47
Цитата Сообщение от vladh Посмотреть сообщение
Но нам этого хватает(а мне правда мало)
Объясните зачем при пошаговом выполнении видеть как создаются кнопки и др. контролы в окнах?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 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
Эксперт по электронике
6583 / 3210 / 335
Регистрация: 28.10.2011
Сообщений: 12,537
Записей в блоге: 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
06.05.2015, 12:32
Цитата Сообщение от vladh Посмотреть сообщение
Во первых кнопки в окне нет - нажимать нечего.
Я уверен - кнопка есть, ты можешь нажать в месте расположения кнопки мышью, а далее запустить программу на выполнение в обычном режиме - события должны обработаться. Возможно конечно кнопка еще и скрыта, т.к. я не имею ни PB ни компилятора, ни EXE файла.
Цитата Сообщение от vladh Посмотреть сообщение
А вот я сейчас попробовал в VB там работает.
Там совершенно другой принцип работы, я уже написал. Ты попробуй скомпилируй программу, а потом пробуй отлаживать ее в OllyDbg - будешь наблюдать тоже самое.
0
Эксперт по электронике
6583 / 3210 / 335
Регистрация: 28.10.2011
Сообщений: 12,537
Записей в блоге: 7
06.05.2015, 12:33
Цитата Сообщение от vladh Посмотреть сообщение
А вот я сейчас попробовал в VB там работает.
Попробуйте как предложил The trick.
Цитата Сообщение от The trick Посмотреть сообщение
Именно поэтому сложные программы на VB6 я отлаживаю со скомпилированным кодом в OllyDbg.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
06.05.2015, 12:38
Цитата Сообщение от vladh Посмотреть сообщение
Вы вначале должны настроить МК на обработку прерываний, т.е. сказать ему что прерывания возможны и в случае их возникновения надо идти туда то и делать то то. И тогда Ваш цикл может быть всегда прерван.
Это пример, само-собой нужно разрешить прерывания вообще и прерывания INT0/INT1, это должно быть само-собой разумеющееся. Также я ничего не писал про SPL/SPH - это ты должен делать сам. Естественно я тебе не буду тут писать статью как обрабатывать прерывания, т.к. это пример не для этого. Если тебе нужно и ты разбираешься в контроллерах - ты знаешь как это сделать. Насчет прерывания цикла - цикла не будет если у тебя стоит брейкпоинт в теле цикла и соответственно прерывать нечего.
0
Эксперт по электронике
6583 / 3210 / 335
Регистрация: 28.10.2011
Сообщений: 12,537
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru