OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 27 Январь, 2019 11:20 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Многие системы разработки включают в себя пошаговый отладчик. Пошаговый отладчик был полезен, когда только я начинал изучать программирование на Turbo Pascal 7.0, так и сейчас на работе в Visual Studio приходится применять отладчик. Думаю, что многим программистам пошаговый отладчик необходим. Если же делать оптимизирующий компилятор, который, допустим, может удалять мертвый код, переставлять какие-то инструкции, выделять общие подвыражения, то просто так пошагово отлаживать оптимизированный код не получится, так как порядок инструкций может быть другим, какие-то инструкции могут быть удалены и так далее.
И здесь возникает несколько вариантов:
1) Не реализовывать пошаговый отладчик. Нет отладчика, нет проблем.
2) Реализовывать 2 режима, один release с оптимизациями, а второй debug без оптимизаций, как это сделано во многих системах.
3) Вводить несколько уровней оптимизации, как описано в https://www.ibm.com/developerworks/ru/l ... index.html То есть, если надо допустим просто пройти по коду и смотреть какие-то значения переменных, то можно использовать более высокий уровень оптимизации, а если надо, допустим, иметь возможность изменять значения переменных в run-time или переходить к другим инструкциям, то использовать другой уровень оптимизации.
4) Пошагово отлаживать оптимизированный код, допустим, сначала пошаговый отладчик будет на строчке 1, затем на строчке 3, затем на строчке 2 (так как инструкции из 2 и 3 были переставлены местами), затем перепрыгнет на 10 строчку (так как инструкции с 4 строки до 9 - это мертвый код). Думаю, будет очень необычно, зато близко к реальности.
5) Для отладки запускать не код, а интерпретатор кода, который позволяет делать что угодно.
6) Ваш вариант.
Кто как думает, какой вариант лучше?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 27 Январь, 2019 12:35 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Добавлю, что с оптимизацией и посмертный отладчик нелегко огрганизовать. Количество отладочной информации возрастает на порядок. Например, у Хрома debug версия более 2GiB.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 27 Январь, 2019 15:10 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Да, данный момент касается также посмертного отладчика. И тут вариантов как я вижу 2:
- или уменьшать точность отладочных данных, например, произошла ошибка в какой-то функции, но эта функция была заинлайнена и будет отображаться только имя функции, которая вызывала данную и не была занлайнена;
- или же просто не применять какие-то оптимизации, которые будут мешать работе посмертного отладчика.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 27 Январь, 2019 17:06 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Что подразумевается под пошаговым отладчиком?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 27 Январь, 2019 17:14 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
В английской википедии есть хорошее описание, что такое отладчик и пошаговый отладчик в частности:
Цитата:
Typically, debuggers offer a query processor, a symbol resolver, an expression interpreter, and a debug support interface at its top level.[1] Debuggers also offer more sophisticated functions such as running a program step by step (single-stepping or program animation), stopping (breaking) (pausing the program to examine the current state) at some event or specified instruction by means of a breakpoint, and tracking the values of variables.[2] Some debuggers have the ability to modify program state while it is running. It may also be possible to continue execution at a different location in the program to bypass a crash or logical error.


И про пошаговость:
Цитата:
Program animation or Stepping refers to the now very common debugging method of executing code one "line" at a time. The programmer may examine the state of the program, machine, and related data before and after execution of a particular line of code. This allows evaluation of the effects of that statement or instruction in isolation and thereby gain insight into the behavior (or misbehavior) of the executing program. Nearly all modern IDEs and debuggers support this mode of execution.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 27 Январь, 2019 17:58 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
Что-то не припомню в турбо-паскале, что б при пошаговой отладке выделенная строка в окне с исходником двигалась не по порядку следования команд\выражений (условия и циклы не считается).
Опять же, "пошаговый" можно рассматривать как вызов и возврат из п/п, а можно и как чисто вход в п/п.
В средах разработки для микроконтроллеров выделенная строка в исходнике может не двигаться несколько шагов, а вот в окне с дизассемблером в это время, там - да, последовательность адресов и вызовов весма замысловатая ;-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 29 Январь, 2019 08:16 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Так турбо-паскаль и не оптимизировал особо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 29 Январь, 2019 08:54 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Очень интересно то, что многие отвечающие в данной ветке, не отвечают на вопрос, который был задан в начале темы, а вопрос был по поводу того, какой из вариантов лучше. А все ответы идут вокруг да около слов упомянутых в теме.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 29 Январь, 2019 14:42 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
Оставить уровень оптимизации и отладочной информации на совесть пограмиста.
По дефолту максимальная оптимизация с максимум отладочной информации без деления на отладочные/релизные сборки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Январь, 2019 10:46 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Я тоже считаю, что деление на отладочную и релизную версию нежелательно. Но с другой стороны, ситуацию можно представить так, что есть разрыв между тем в каких терминах думает программист и тем, как программа реально исполняется на компьютере. Программист, как мне кажется, больше думает в терминах кода и строк кода, а оптимизированный код может перемешивать части этих строк кода и выполнять их в другом порядке и по частям. Если отлаживать оптимизированную программу, то программист может быть нагружен ненужными для него деталями того, как программа реально исполняется (это, конечно, тоже может быть необходимо, если, допустим, есть ошибка в оптимизаторе или же в процессоре), но если у программиста есть довольно очевидные ошибки уже на уровне кода, то думаю, что привычная пошаговая отладка будет лучше. То, есть разделение все же необходимо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Январь, 2019 13:18 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Мне представляется, что в среде обязательно должен быть режим проверки идентичности результатов прогона
отладочного варианта (работает - как написано) и оптимизированного.
Тогда отладчик в релизе будет не нужен.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 30 Январь, 2019 15:34 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Чур меня! чур меня! чур меня!..


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 31 Январь, 2019 22:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Иметь интерпретирующую реализацию для этапа разработки - тогда можно кучу вещей малой кровью делать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 31 Январь, 2019 22:27 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Rifat писал(а):
Очень интересно то, что многие отвечающие в данной ветке, не отвечают на вопрос, который был задан в начале темы, а вопрос был по поводу того, какой из вариантов лучше.

Очевидно же, что первый. :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Февраль, 2019 11:15 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Во-первых, о какой системе идёт речь? Для blackboxcomponentbuilder пошаговый отладчик уже есть. Не идеальный, но работать можно. Если A2OS, то я прямо готов участвовать в меру своих сил, при условии, что я буду не единственным участником. Опыт модификации отладчиков имеется, хотя все они были сделаны на высоком уровне, а не на уровне штатных интерфейсов отладки ОС. И в этом есть свои плюсы и минусы.

Во-вторых, с культом простоты совместимо только два варианта:
Цитата:
2) Реализовывать 2 режима, один release с оптимизациями, а второй debug без оптимизаций, как это сделано во многих системах.
4) Пошагово отлаживать оптимизированный код, допустим, сначала пошаговый отладчик будет на строчке 1, затем на строчке 3, затем на строчке 2 (так как инструкции из 2 и 3 были переставлены местами), затем перепрыгнет на 10 строчку (так как инструкции с 4 строки до 9 - это мертвый код). Думаю, будет очень необычно, зато близко к реальности.

Несколько уровней оптимизации на самом деле означают, что есть ЭН разных оптимизаций, которые включаются группами или каждая по отдельности. В худшем случае верификации подлежат 2^ЭН вариантов компилятора. Если мы лишаем себя возможности включать оптимизации независимо, то верификации подлежат только два варианта. Хотя может быть несколько целей оптимизации (как минимум, скорость, компактность и рилтаймовость), тогда будет более чем два варианта, но без комбинаторного взрыв хотя бы.

По поводу варианта 4, тут на самом деле надо ходить по ассемблерному коду. При хождении по оному нужно пытаться показать место в исходном коде. Иногда такого места не будет, иногда их получится более одного. Но если просто скакать по строчкам козликом, то
этот инструмент будет довольно безполезен. Именно ходить по шагам редко нужно, обычно нужно ставить точки прерывания. Поставить точку прерывания в произвольном месте оптимизированной программы нельзя. Тогда придётся искать ближайшее место, где можно поставить точку. Инструмент получается слишком сложным в использовании - за это опять же бог простоты низвергнет на нас свои молнии.

Вариант (5) запускать интерпретатор - это дешёвый вариант в худшем смысле слова. Кроме ошибок в прикладном коде, есть ещё и ошибки в компиляторе. Не остаётся никакого инструмента, чтобы отличить одно от другого. Запускать в режиме интерпретации всю систему может быть неприемлемо для производительности. Если запускать только часть, то требуется полная совместимость между компилируемым и интерпретируемым кодом - это усложнит проектирование и компилятора, и интерпретатора, а может быть, скажется и на конечном результате (возникнут ограничения на генерацию кода, например). Хотя этой дорогой я не ходил и точно не знаю. В лиспе совместимость между компилятором и интерпретатором есть, но в SBCL стек в отладчике показывается плохо, если там смешаны интерпретируемые и компилируемые кадры. Т.е. они не смогли дошлифовать качество.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Февраль, 2019 20:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
Вариант (5) запускать интерпретатор - это дешёвый вариант в худшем смысле слова. Кроме ошибок в прикладном коде, есть ещё и ошибки в компиляторе. Не остаётся никакого инструмента, чтобы отличить одно от другого. Запускать в режиме интерпретации всю систему может быть неприемлемо для производительности.


Ошибка в компиляторе локализована: когда вы найдёте точку, в которой что-то пошло не так, то просто декодировать модуль (как DevDecoder-ом для ББ) - и посмотреть на сгененированный код.

Реальная же потребность в сложном случае снять трассы, как что выполнялось, как раз интерпретатором решается дёшево - и с такими плюшками, которые замучаешься реализовывать на уровне native-отладки.

Реально, когда просится в руки отладчик - как раз не по шагам гонять в ограниченной локации (это обожают мейнстримеры, не умеющие цикл написать безошибочно), а хотелось бы получить для анализа какой-то удобно представленный отчёт о том, что происходило в рантайме. О трассе, передаче в ООП-вызовах, значениях и т.п.

А если можно этот процесс анализа выполнения заскриптовать на самом же Обероне - то вообще интересно. Выведи по триггерам каким-то то, что тебе нужно. Как там Пётр Кушнир на Хабре задвигал идеи - на каком этапе ЖЦ можно скриптовать на самом Обероне?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Февраль, 2019 22:16 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Цитата:
как раз интерпретатором решается дёшево - и с такими плюшками, которые замучаешься реализовывать на уровне native-отладки.

С какими именно?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB