0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
||||||
1 | ||||||
Отладчик работает не так как казалось бы должен05.05.2015, 12:19. Показов 3317. Ответов 40
Метки нет (Все метки)
Прошу объяснить, почему отладчик работает не так как казалось бы должен. Т.е. привожу для примера такой код:
0
|
05.05.2015, 12:19 | |
Ответы с готовыми решениями:
40
Собрал пк но он не работает так как должен График параболы в окне не выводится (а, казалось бы, должен) На ПК интернет работает так, как и должен, как я подключил интернет к ноутбуку скорость упал на несколько раз Отладчик - как сделать так чтобы в качестве значений отоборажались НЕ Синонимы |
05.05.2015, 18:26 | 2 |
Пример не самый удачный.
В данном случае, дело не в отладчике, а в реализации окон в винде. Для нормальной отрисовки (и не только) окна, его события должны своевременно обрабатываться, а когда программа пошагово выполняется, этого не происходит и окно "виснет".
0
|
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
|
05.05.2015, 18:35 [ТС] | 3 |
Тогда какой смысл в таком отладчике? Я пробовал ставить две точки останова и скакать между ними. Результат тот же - плохой. И Вы хотите сказать, что отладчик нормальный, сама Windows плохая? Но это не так.
0
|
05.05.2015, 19:46 | 4 | |||||
Смысл есть.
Отладчик обычно используется для пошагового выполнения программы с возможностью просмотра содержимого всех переменных, массивов, структур и т. д. https://www.cyberforum.ru/atta... 1316531307 Если создавать окно в пошаговом режиме, то его содержимое все равно не увидите. Почему? Уже отвечал - события окна не обрабатываются! Вспомните что происходит с окном программы, которая зависла? Обычно содержимое окна исчезает и в заголовке появляется сообщение что программа не отвечает. Так вот, программу выполняемую пошагово, можно считать зависшей, т. к. ее работа полностью остановлена. Ничего говорить не буду. Со временем сами все поймете. Нужно взять за правило что события окна должны обрабатываться, иначе окно "повиснет". Такая особенность у окон. Добавил в ваш пример одну строку Delay(1000), которая создает секундную задержку что сильно замедляет обработку событий.
0
|
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
|
05.05.2015, 20:10 [ТС] | 5 |
После Вашего примера все стало более нехорошо. Если его запустить, то кнопка появляется(на моем компьютере) секунд через 6!? Это вообще ни в какие ворота. И вообще, ну я понимаю в случае недостатка памяти, малой тактовой частоты и т.п. программа может выполняться с задержками. Но Объясните мне как при шаговом выполнении она вообще не выполняет указанные команды? Из того что Вы мне пока говорили ничего меня не убедило.
0
|
05.05.2015, 20:48 | 6 |
Команды выполняются. Просто кнопка не отображается в окне, потому что оно не перерисовывается из-за отсутствия обработки событий. Так устроены окна.
Реально ни разу не видели как виснут проги с отображением надписи "не отвечает" в заголовке окна? При этом содержимое окна обычно пропадает. Тоже самое происходит при пошаговой отладке.
0
|
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
|
05.05.2015, 21:00 [ТС] | 7 |
Разумеется зависания программ я видел. Но здесь то это причем? Причина зависаний программ чаще всего можно объяснить ошибками кода(в первую очередь). Но в данном случае в динамике код работает так как я заказываю, хотя в Вашем примере с секундной задержкой он тоже работает неверно. В случае отладки ему ничто не должно мешать(кроме как неверно прописанной программы отладки). Обычно я пишу программы работы МК и симулирую их работу в Proteuse. Так вот там подобная ситуация приводит к панике в работе программы. А здесь Вы говорите, что это ничего страшного, зато можно отслеживать состояние переменных.
0
|
Модератор
|
|
05.05.2015, 21:36 | 8 |
Как при чем? Ты выполняешь программу пошагово. Любая активность окна (отрисовка, обработка сообщений мыши и практически все) также выполняются пошагово, т.е. это все не может происходить само собой, для этого ты должен выбрать сообщение из очереди и отправить его окну. Ты до этого даже не доходишь. Тоже самое в любом отладчике такого типа.
0
|
05.05.2015, 22:14 | 9 |
Потому что работа программы полностью останавливается, т. е. фактически программа виснет.
Представьте что у вас есть код для МК, который в цикле опрашивает кнопку, подключенную в одному из выводов МК. В динамике все будет работать нормально и МК без ошибок и пропусков определит момент нажатия и отпускания кнопки. А теперь представьте что код в МК выполняется в пошаговом режиме, скажем один шаг в две секунды. Сможет ли МК при этом зафиксировать изменения состояния кнопки при условии что при этом выполняется другой код (не опрос порта МК)? Разве это из-за проблемы в отладчике? Т. е. отладчик каким-то образом должен "догадаться" о кнопке, "висящей" на порту МК и опрашивать ее?
0
|
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
|
06.05.2015, 05:51 [ТС] | 10 |
Нет, не я выполняю программу "пошагово", а отладчик(1). Я нигде и не говорю, что все происходит само собой. Код работает в первую очередь под управлением отладчика и моим(2). Т.е. Отладчик должен выполнить строку программы и остановиться(пошагово). После этого отладчик может заниматься чем угодно(хоть пиво пить), но постоянно должен быть готовым выполнить прерывание от клавиатуры или мышки. После получения очередного прерывания, отладчик должен(!) выполнить следующую строку кода. Например, создать(отрисовать на экране) кнопку. И если он её не выполняет то это значит, что он работает неправильно. По моему все достаточно логично.
Добавлено через 9 минут Пример не совсем корректный. Когда я запускаю в работу с кодом отладчик, то это не значит, что теперь компьютер полностью начинает работать в пошаговом режиме. Все параллельные программы как работали так и работают. Но вот мой исследуемый код должен работать пошагово. Т.е. встретился с командой "нарисовать окно", он должен нарисовать его так быстро, как позволяет это аппаратная и программная часть компьютера. Ну почему не так? Добавлено через 9 минут Мне кажется, что компилятор переписывает код программы как то по своему. Он меняет порядок выполнения команд.
0
|
06.05.2015, 06:43 | 11 |
Логика человека, который не знаком с принципами работы оконного приложения.
Скомпилируйте ваш код, запустите под общеизвестным "правильным" отладчиком, к примеру Olly Debugger. Выполняйте пошагово, сравните результат. Это да, на то он и компилятор. Оптимизирует, убирает мусор, переписывает с почти человеческого Бейсика в абсолютно машинный код, но логику программы точно сохраняет. Я проверял. Лично.
0
|
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
|
06.05.2015, 07:24 [ТС] | 12 |
Из быстрого просмотра описания этого универсального инструмента я понял, что он работает с машинными кодами. Но там я подозреваю уже ход первоначального текста программы может быть изменен. Здесь же разговор идет о своем отладчике, который должен пошагово проверять работу исходного текста программы написанной именно на этом языке.
Добавлено через 25 минут В данном случае отладчик Пуре Бейсик может быть даже работает не с компилированным кодом. Он может быть с основным текстом программы обращается как то по своему. Но мне надо, чтобы отладчик продемонстрировал выполнение моих команд в данном конкретном месте текста программы. Если я, напрмер, хочу в данном месте сложить два числа и увидеть результат этой работы, а он(отладчик) мне этого не покажет в данный момент времени то как это называется?
0
|
06.05.2015, 08:01 | 13 |
Не пишите ерунду, лучше изучите матчасть, к примеру, что это за файл создается с именем PureBasic_Compilation0.exe?
К чему эти гнусные инсинуации, не подтвержденные на практике реальными примерами? Что положено делать отладчику он делает, остальное ваши хотелки, противоречащие принципам работы системы.
0
|
06.05.2015, 10:09 | 15 |
Винда не позволяет приложениям обрабатывать аппаратные прерывания. Это доступно только ядру системы и драйверам. Но даже драйверы не могу непосредственно получить доступ к обработке прерывания, а должны подписаться на него, например, с помощью функции ядра IoConnectInterrupt().
Даже если предположить что приложение может обрабатывать прерывания, то код их обработчика также должен выполнятся в пошаговом режиме. В древности, люди считали что гром и молния это дело рук Зевса, Тора и т. д. Они не знали что на самом деле это электрические разряды в облаках. Вы ведете себя как те древние люди. Не зная как работает операционная система и программы в ней, доказываете что все не так как должно. Дело не в отладчике, а в устройстве окон и чем быстрее это поймете, тем лучше для вас. Правильно. Окно рисует не отлаживаемая программа, а операционная система. Она ждет от программы обработки событий окна, но поскольку программа выполняется в пошаговом режиме, события не обрабатываются. Это понятно? Не поверите, именно так и происходит, но вы не читаете что вам пишут. Продублирую. Надеюсь это понятно? Все команды выполняются и кнопка создается, а не отображается из-за отсутствия обработки событий окна. Чтобы события обрабатывались, нужно вызывать функцию WaitWindowEvent() или WindowEvent(), но в программе выполняемой пошагово этого не происходит, или происходит очень редко. Это называется невнимательность. Давал выше ссылку где в картинках показано как посмотреть значения переменных в программе, выполняемой пошагово. Есть много способов это сделать. Несколько из них. 1. Использовать команду Debug. 2. Открыть окно "Просмотр переменных" из меню "Отладчик". 3. Навести мышку на интересующую переменную и ее значение отобразится во всплывающем окне. Все это показано в картинках по ссылке выше. Видимо даже не смотрели...
0
|
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
|
06.05.2015, 10:14 [ТС] | 16 |
Во-первых я же и сказал, что ничего не происходит самой собой. Вот я же записал в 4 строчке: "ButtonGadget(2,50,30,80,25,"Кнопка")". Объясните мне пж. что должна сделать программа встретив на своем пути эту строчку?
0
|
06.05.2015, 10:19 | 17 |
Выше уже писал что кнопка создается, а не отображается из-за отсутствия обработки событий. В вашем коде при пошаговой отладке, сколько раз в секунду выполняется функция WaitWindowEvent()? Должна выполнятся хотя бы 20 раз в секунду чтобы своевременно обрабатывать события окна.
0
|
Модератор
|
|
06.05.2015, 10:22 | 18 |
Еще раз. Ты этого хочешь.
Я думаю (точно не знаю, но полагаясь на свой опыт исследования программ) будет выполнено (в Windows) CreateWindowEx. Выделяется память для структур окна, возможно сначала даже будет зарегистрирован новый класс окна (если этого не делает CreateGadgetList), обработаны сообщения WM_NCCREATE, WM_CREATE и т.п, которые обрабатываются внутри функции CreateWindowEx. Отрисовка имеет самый низкий приоритет и поэтому всегда выполняется в самом конце, когда в очереди нет больше сообщений. А ты хочешь чтобы твоя кнопка появилась, даже не начав обрабатывать какие-либо события.
0
|
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 37
|
|
06.05.2015, 10:38 [ТС] | 19 |
Я готов согласится с locm,
Но тогда встоет вопрос6 "Когда же она нарисуется?" Уважаемый locm говорит, что она должна появиться когда будут вызваны функции WaitWindowEvent() или WindowEvent(). Но эта функция постоянно вызывается в цикле(строчка 7) и ничего.
Добавлено через 6 минут Для того чтобы обрабатывалось событие связанное с этой кнопкой надо вначале нарисовать эту кнопку! Просто отладчик в этой программе представлен с претензией и на симуляцию работы программы. Но это не работает. Пусть бы он не пытался выводить окно разрабатываемой программы. Просто бы выводил указатель обрабатываемой строки, состояние переменных, регистров. И тогда у меня бы не возникло вопросов.
0
|
06.05.2015, 10:46 | 20 | |||||
Я говорю следующее.
Сколько раз в секунду вызывается эта функция при пошаговой отладке?
Окно генерирует много событий и их все нужно объять из очереди, иначе операционная система "считает" что программа зависла. Запустите этот код и посмотрите насколько часто и в каких случаях появляются события.
Дайте ссылку на MSDN (документацию) от майкрософт где написано что должно быть именно так. По видимому умные дядьки-программисты из майкрософта с вами не согласны.
0
|
06.05.2015, 10:46 | |
06.05.2015, 10:46 | |
Помогаю со студенческими работами здесь
20
Казалось бы простой запрос, а не работает! Казалось бы, эквивалентные if, но один работает, а второй нет Не строит как должен, или делаю что-то не так? Объект перемещается не так как должен - подскажите где ошибка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang
Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
|
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
|
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|
UserScript для подсветки кнопок языков программирования в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения:
/ / ==UserScript==
/ / @name CF_DefaultLangSelect
/ / . . .
|
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
|
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
|