Модернизация отладчика
Модернизация отладчика
btDecoder не понимает нового формата объектных файлов. Начало - тут:
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6509
Ближайший план - попробовать проскочить с помощью чего-нибудь, например, отладчика.
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6509
Ближайший план - попробовать проскочить с помощью чего-нибудь, например, отладчика.
Последний раз редактировалось БудДен 19.01.20 10:45, всего редактировалось 1 раз.
Re: Чиним btDecoder
Выяснилось, что в поздних версиях декомпилятор работает. Поэтому пока что я его просто отключил и отладчик заработал.
Re: Модернизация отладчика
Идём по журналу работы с отладчиком и вспоминаем.
Что изменилось?
- 2019-16-11 cd737f66c7a6 - Добавление WMDebugger от Богдана Т.
- тут же рядом "Поправил инструкции по сборке отладчика" - они находятся в WMDebugger.Tool, но позже отладчик стал собираться вместе с A2
- «Почистил меню отладчика» - некоторые функции не работают, а присутствуют только в меню
- Релиз 2019-11-24 - тут отладчик работал, это старый формат
- (старое время)2016-01-05 - последний релиз в старом формате объектных файлов
- 2019-11-25 - этот же релиз в старом формате объектных файлов слит с веткой, включающей отладчик
- (старое время)2016-05-15 - релиз с уже новым форматом, выбранный так, чтобы новый формат уже укрепился (хотя мог быть и ошибочно выбран)
Что изменилось?
- команды компиляции, к-рые продублированы в
- формат некоторых данных
- сломался Decoder
Re: Модернизация отладчика
- 2019-12-01 Отладка отладчика - просто отладочные сообщения
- Убрал падение при открытии файла в отладчике - ничего, связано с логгера
- Пытаюсь поправить команды компиляции - важно - команда компиляции зашита в WMDebugger.Mod. На самом деле
она должна быть параметризована и зависеть от конфигурации системы. Но это потом, а пока она должна соотноситься с
командой компиляции по умолчанию, к-рая есть где-то ещё (в самом компиляторе и в средах разработки, как я понял). - 2019-12-03 Отключаем поиск конца функции. Был некий костыль для нахождения точки выхода из функции. Он сломался, поэтому в данном коммите он отключён. Вроде бы его отключение не стало фатальным.
- 2019-12-05 Ходьба частично заработала - здесь починена пр-ра BtDTraps.GetProcedure , к-рая находит адрес пр-ры по имени. Теперь она работает на базе новой рефлексии
- 2019-12-08 В отладчике поправил навигацию по процедурам - здесь отключен поиск конца процедуры (ВАЖНО - он потом обратно включён спустя один коммит), также отключен поиск начала процедуры - вот этого я не понял. И это всё в этом коммите.
- 2019-12-08 Переместить объектные файлы - цитирую «При открытии в отладчике, объектные файлы направлять в директорию obg, как и при компиляции» - изменена зашитая в WMDebugger.Mod команда компиляции
- 2019-12-08 - Вернул обратно (кривой) поиск конца процедуры
«Стало чуть лучше, но в момент срабатывания брекпойнта всё равно трап
Разница в том, что раньше место не находилось из-за нулевого
конца процедуры, а теперь - находится» - Тест btDecoder проходит. Тест такой:
Никаких особых изменений в коде нет.
Код: Выделить всё
WMDebugger.Open TestDbg.Mod ~ TestDbg.TestSort~ Decoder.Open TestDbg.TestSort~
- 2019-12-14 - За счёт отключения декодера отладчик заработал - в будущем декодер зарабатает и мы постраемся его включить, но для отладки на уровне исходников он не нужен
SystemTools.FreeDownTo TestDbg BtDTraps~
Re: Модернизация отладчика
- (Старое время)2016-12-06 - пытаемся ещё скакнуть в будущее. За это время из заметного изменился формат метки.
- 2019-12-19 - Кое-как пересобрал (ВСЁ ПРАВИТЬ) - собрал саму A2, но что-то отвалилось. Смотрим на изменения в отладчике:
- - BtDTraps - сломана GetProcedure. В релизе от 2019-12-27 она типа починена, но это не привело к работоспособности отладчика
- там же - отключено отображение переменных в PROCEDURE Variables и GetLocalVars. Из-за изменений в рефлексии.
- - BtDecoder - пока не важно, т.к. его всё равно отключили
- - FoxAMDBacked - отключаем assembler.UseLineNumbers - не знаю, зачем и почему.
- - там же, BohdanPС - почти полностью отключён (изменился тип Label).
- - FoxCompiler - исчезла пр-ра GetDefaults - в современных исходниках она не упоминается, значит, скорее всего, это нормально.
- - WMDebugger.Mod - процедура GetLocalVars поломана аналогично такой же пр-ре в BtDTraps. А почему их вообще две?
- - там же, убраны ссылки на Reflection.NewObjectFile - видимо, надо чинить.
Re: Модернизация отладчика
- 2019-12-27 -
- попытка починить BtDTraps.GetProcedure, с неизвестным исходом
- Decoder.Mod - изменён порядок инициализации декодеров, но неизвестно, к чему это привело
Re: Модернизация отладчика
План починки:
- (есть)исправить команды компиляции
- (то ли сделал, то ли не понадобилось)поскольку BohdanPC основан на FindPC, выяснить соответствие между FindPC и BohdanPC в старой версии.
- (BohdanPC починился как-то)понять, как изменился формат FoxBinaryCode.Labels и попытаться починить BohdanPC
- (не знаю, что это)проверить работоспособность GetProcedure
- (перевёл на новую рефлексию)посмотреть на процедуры Variables и GetLocalVars (в более чем одном модуле)
Последний раз редактировалось БудДен 23.01.20 15:51, всего редактировалось 1 раз.
Re: Модернизация отладчика
В FindPC изменилась только диагностика: diagnostics.Error( ... ) заменилась на (Fox)Basic.Error(diagnostics, ...)
2016-10-08 LabelList.position изменил тип с Longint на FoxBasic.Position .
Похоже, эта тема началась 2016-10-07 коммитом "Added rich position to Scanner / Syntax Tree Elements"
В чём состояло изменение? Вместо одного LONGINT стала целая запись, в к-рой есть start и end.
Как был изменён код? postion переехал в position.start. А остальное?
2016-10-08 LabelList.position изменил тип с Longint на FoxBasic.Position .
Похоже, эта тема началась 2016-10-07 коммитом "Added rich position to Scanner / Syntax Tree Elements"
В чём состояло изменение? Вместо одного LONGINT стала целая запись, в к-рой есть start и end.
Как был изменён код? postion переехал в position.start. А остальное?
Re: Модернизация отладчика
Заработали точки останова в ветке от 2016-12-06.
Ходьба пока не работает.
Ходьба пока не работает.
Re: Модернизация отладчика
Показывается стек. Ходьба в примере с сортировкой вроде на вид работает, хотя не все функции тестировал.
Не хватает показа глобальных переменных.
Не хватает показа глобальных переменных.
Re: Модернизация отладчика
Вчера убрал проверку того, что печатаемое значение находится на стеке, коммит не скажу. Лучше заработала печать значений (жо этого всё время писало "объект не на стеке и не на куче", потому что он был на стеке другого процесса, а не процесса отладчика). Отсутствие проверки плохо, но пока пусть так будет.
Попробуем теперь сделать, чтобы отладчик обрабатывал не все прерывания, а только свои. Где-то я это уже копал.
Попробуем теперь сделать, чтобы отладчик обрабатывал не все прерывания, а только свои. Где-то я это уже копал.
Код: Выделить всё
ExceptionRecord* = RECORD
ExceptionCode*, ExceptionFlags*: SIGNED32;
nextExceptionRecord* {UNTRACED}: ExceptionRecordPtr;
ExceptionAddress*: ADDRESS;
NumberParameters*: SIGNED32;
ExceptionInformation*: ARRAY ExceptionMaximumParameters OF SIGNED32
END;
Re: Модернизация отладчика
Фильтр на нужные прерывания вроде работает, но зато сломался поиск места в коде в точке останова. Первая мысль - дело в кириллице, и это я сейчас всё ещё проверю, а потом уже спать. Нет. Это не она.
Re: Модернизация отладчика
Исправил ещё пару ошибок.
- формировались кривые точки останова с нулевым адресом.
- Не находилась процедура загрузки модуля (правда, вряд ли её удастся отладить отладчиком - модуль загружается в процессе его открытия отладчиком, и ставить точки прерывания после этого уже поздно). Видимо, нужно отказаться от показа потенциальных точек прерывания в коде загрузки модуля...