OberonCore
https://forum.oberoncore.ru/

Оптимизирующий компилятор и пошаговый отладчик
https://forum.oberoncore.ru/viewtopic.php?f=61&t=6345
Страница 1 из 1

Автор:  Rifat [ Воскресенье, 27 Январь, 2019 11:20 ]
Заголовок сообщения:  Оптимизирующий компилятор и пошаговый отладчик

Многие системы разработки включают в себя пошаговый отладчик. Пошаговый отладчик был полезен, когда только я начинал изучать программирование на 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) Ваш вариант.
Кто как думает, какой вариант лучше?

Автор:  Trurl [ Воскресенье, 27 Январь, 2019 12:35 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Добавлю, что с оптимизацией и посмертный отладчик нелегко огрганизовать. Количество отладочной информации возрастает на порядок. Например, у Хрома debug версия более 2GiB.

Автор:  Rifat [ Воскресенье, 27 Январь, 2019 15:10 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Да, данный момент касается также посмертного отладчика. И тут вариантов как я вижу 2:
- или уменьшать точность отладочных данных, например, произошла ошибка в какой-то функции, но эта функция была заинлайнена и будет отображаться только имя функции, которая вызывала данную и не была занлайнена;
- или же просто не применять какие-то оптимизации, которые будут мешать работе посмертного отладчика.

Автор:  Kemet [ Воскресенье, 27 Январь, 2019 17:06 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Что подразумевается под пошаговым отладчиком?

Автор:  Rifat [ Воскресенье, 27 Январь, 2019 17:14 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

В английской википедии есть хорошее описание, что такое отладчик и пошаговый отладчик в частности:
Цитата:
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.

Автор:  Artyemov [ Воскресенье, 27 Январь, 2019 17:58 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Что-то не припомню в турбо-паскале, что б при пошаговой отладке выделенная строка в окне с исходником двигалась не по порядку следования команд\выражений (условия и циклы не считается).
Опять же, "пошаговый" можно рассматривать как вызов и возврат из п/п, а можно и как чисто вход в п/п.
В средах разработки для микроконтроллеров выделенная строка в исходнике может не двигаться несколько шагов, а вот в окне с дизассемблером в это время, там - да, последовательность адресов и вызовов весма замысловатая ;-)

Автор:  Trurl [ Вторник, 29 Январь, 2019 08:16 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Так турбо-паскаль и не оптимизировал особо.

Автор:  Rifat [ Вторник, 29 Январь, 2019 08:54 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Очень интересно то, что многие отвечающие в данной ветке, не отвечают на вопрос, который был задан в начале темы, а вопрос был по поводу того, какой из вариантов лучше. А все ответы идут вокруг да около слов упомянутых в теме.

Автор:  SovietPony [ Вторник, 29 Январь, 2019 14:42 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Оставить уровень оптимизации и отладочной информации на совесть пограмиста.
По дефолту максимальная оптимизация с максимум отладочной информации без деления на отладочные/релизные сборки.

Автор:  Rifat [ Среда, 30 Январь, 2019 10:46 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Я тоже считаю, что деление на отладочную и релизную версию нежелательно. Но с другой стороны, ситуацию можно представить так, что есть разрыв между тем в каких терминах думает программист и тем, как программа реально исполняется на компьютере. Программист, как мне кажется, больше думает в терминах кода и строк кода, а оптимизированный код может перемешивать части этих строк кода и выполнять их в другом порядке и по частям. Если отлаживать оптимизированную программу, то программист может быть нагружен ненужными для него деталями того, как программа реально исполняется (это, конечно, тоже может быть необходимо, если, допустим, есть ошибка в оптимизаторе или же в процессоре), но если у программиста есть довольно очевидные ошибки уже на уровне кода, то думаю, что привычная пошаговая отладка будет лучше. То, есть разделение все же необходимо.

Автор:  Валерий Лаптев [ Среда, 30 Январь, 2019 13:18 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Мне представляется, что в среде обязательно должен быть режим проверки идентичности результатов прогона
отладочного варианта (работает - как написано) и оптимизированного.
Тогда отладчик в релизе будет не нужен.

Автор:  Info21 [ Среда, 30 Январь, 2019 15:34 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Чур меня! чур меня! чур меня!..

Автор:  Илья Ермаков [ Четверг, 31 Январь, 2019 22:27 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Иметь интерпретирующую реализацию для этапа разработки - тогда можно кучу вещей малой кровью делать.

Автор:  Trurl [ Четверг, 31 Январь, 2019 22:27 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

Rifat писал(а):
Очень интересно то, что многие отвечающие в данной ветке, не отвечают на вопрос, который был задан в начале темы, а вопрос был по поводу того, какой из вариантов лучше.

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

Автор:  budden [ Суббота, 02 Февраль, 2019 11:15 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

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

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

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

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

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

Автор:  Илья Ермаков [ Суббота, 02 Февраль, 2019 20:06 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

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


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

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

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

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

Автор:  budden [ Суббота, 02 Февраль, 2019 22:16 ]
Заголовок сообщения:  Re: Оптимизирующий компилятор и пошаговый отладчик

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

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/