PDA

Просмотр полной версии : Breakpoints в связке Sjasmplus+UnrealSpeccy



Kurles
19.01.2009, 02:23
Практически каждому кодеру, использующему связку sjasmplus + unrealspeccy приходться отлаживать свои программы, используя дебагер унрила и .sna снапшоты. Вроде все хорошо - снапшот грузиться, в мониторе метки показываются - ляпота. Ан нет, при загрузке снапшота нельзя ставить брикпоинты, и что бы начать собственно отладку приходится в самой программе вместо брикпоинта писать di:halt, после чего в ручную выходить в отладчик, что не очень удобно. Посему посетила идея - а почему бы не придумать новый формат, который будет сразу хранить в себе и аналог sna, и метки, и брикпоинты, вплодь до условных по стандарту унрила? Хотелось бы услышать мнения народа по этому поводу, особенно Aprisobal'а и DeathSoft'а, как отвечающих за вышеназваные проекты. Для себя ужё сделал половинчатое решение - вместе с user.l унрил стал грузить user.bpl, содержащий адреса брикпоинтов в хексе, если при запуске указать ключик -b. Ну и в sjasm добавил пару диерктив - bplist - имя файла с адресами брикпоинтов и setbp expr - собственно что бы указывать, какие именно адреса выписывать. Если кому надо - могу поделиться.

Shadow Maker
19.01.2009, 08:56
Конечно надо, делись. Сам вчера об этом думал :)

Aprisobal
19.01.2009, 17:39
Отличная идея, ждем исходников с вышеназванными изменениями.

Kurles
19.01.2009, 18:59
Конечно надо, делись. Сам вчера об этом думал :)
Связка sjsamplus + unrealspeccy и пример использования новых фич :)
http://karat-scales.ru/sjasm_unreal.zip

Добавлено через 28 минут

Отличная идея, ждем исходников с вышеназванными изменениями.Отослано. Только это какое-то недорешение, хотелось бы с комьюнити (слово то какое :) ) таки формат полновесного дебаг-файла разработать, и его уже в sjasm'e поддержать.

Shadow Maker
22.01.2009, 15:41
Вообще мне кажется это надо бы поддержать не в виде файлов, а в виде брейк-команд в компиляторе. А то это реально какая-то жесть так описывать.

Kurles
22.01.2009, 17:29
Вообще мне кажется это надо бы поддержать не в виде файлов, а в виде брейк-команд в компиляторе. А то это реально какая-то жесть так описывать.В смысле брейк-команд, что-то я немножко не догнал :(

Shadow Maker
22.01.2009, 22:11
Ну в смысле чтобы мона было в любом месте программы написать ключевое слово breakpoint к примеру и sjasm автоматом сгенерил адрес этого места в user.bpl . А то как-то не айс каждый раз менять их руками при смещении адреса к примеру.

breeze
22.01.2009, 23:40
отличная идея! только предлагаю ключевым словом сделать - debug

Shadow Maker
22.01.2009, 23:47
Ну я ж говорю к примеру. Так-то я предлагаю brk или break :)

Kurles
23.01.2009, 00:57
Ну в смысле чтобы мона было в любом месте программы написать ключевое слово breakpoint к примеру и sjasm автоматом сгенерил адрес этого места в user.bpl . А то как-то не айс каждый раз менять их руками при смещении адреса к примеру.

отличная идея! только предлагаю ключевым словом сделать - debugСтоп. Архив внимательно смотели? Там же экзампл есть, и если к нему немного присмотреться, то можно найти 2 новые директивы для sjasm'а - bplist - по аналогии с labelslist, только файл для брикпоинтов указывается, и setbp expr - выписать в файл с точками останова выражение expr, то бишь пиши в любом месте setbp $ и будет тебе счастье. Ну ещё длинный алиас для setbp есть - setbreakpoint. Тока что то мне подсказывает, что им мало кто будет пользоваться ;)

Shadow Maker
23.01.2009, 01:11
Надо было хотя бы комментарии написать к этому. Тада вопросов нет.

Kurles
23.01.2009, 01:44
Надо было хотя бы комментарии написать к этому. Тада вопросов нет.Ну да, что в исходниках не сделал коментарии - моя вина, сорри, но в этом сообщении (http://zx.pk.ru/showpost.php?p=177763&postcount=77) про эти нововведения было написано, так что признаю за собой только половину вины ;)

Shadow Maker
23.01.2009, 02:16
Kurles, вот из этого пояснения: "setbp expr - собственно что бы указывать, какие именно адреса выписывать" как-то неочевидно, что это именно то, что надо ;) Сейчас, когда ты объяснил, оно уже как бы понятно, а до этого я так и не вкурил, чего там за адресы выписывать :)

Antipod
23.01.2009, 11:11
http://karat-scales.ru/sjasm_unreal.zipФишка полезна однозначно, но тут два затруднения ( автору, ессесна, может быть паралелльно ):
- ассемблер не содержит некоторых фич (http://zx.pk.ru/showpost.php?p=163066&postcount=283);
- не использую анреал выше 0.35 по религиозным соображениям :eek:

Поэтому предоставьте сорцы плз:)

Kurles
23.01.2009, 13:01
Фишка полезна однозначно, но тут два затруднения ( автору, ессесна, может быть паралелльно ):
- ассемблер не содержит некоторых фич (http://zx.pk.ru/showpost.php?p=163066&postcount=283);
- не использую анреал выше 0.35 по религиозным соображениям :eek:

Поэтому предоставьте сорцы плз:)пожалуйста -2 patch файла для unreal 0.37.1 и для sjasmplus 1.07RC7

Antipod
24.01.2009, 05:31
пожалуйста -2 patch файла для unreal 0.37.1 и для sjasmplus 1.07RC7Кста, это или diff проглючило, или непраильно понял, но, кажется, что в функции loadbpx должно присутствовать нечто типа:
membits[val] |= MEMBITS_BPX;
иначе, брякпоинты не добавляются...
еще раз спасибо!)

Kurles
24.01.2009, 14:39
Кста, это или diff проглючило, или непраильно понял, но, кажется, что в функции loadbpx должно присутствовать нечто типа:
membits[val] |= MEMBITS_BPX;
иначе, брякпоинты не добавляются...
еще раз спасибо!)Видать все таки diff проглючило, причем интересно так - он пропустил самую нужную строчку в процедуре :) Если честно, первый раз сей тулзой пользуюсь, так что извиняйте. Надеюсь с sjasmplus таких проблем не было :)

TmK
25.01.2009, 12:47
А я мечтал о том, чтобы можно было отслеживать луч...
Т.е. например в проге пишем дерективу raypos, также будет как с метками на точки останова, тока тут на экран будет выводиться ( на бордюр или на основной, где луч) например мигающая полоска из 8 битов, также будет кул если можно будет написать label1 raypos и можно будет в эмуле посмотреть значение переменной label1 которая будет показывать кол-во тактов от инта до метки
и например дерективу freetacts - сколько осталось до конца прерывания (в зависимости от типа выбранной машины конечно)

Очень удобно было бы для отладки мультиколора

Kurles
25.01.2009, 19:01
А я мечтал о том, чтобы можно было отслеживать луч...
Т.е. например в проге пишем дерективу raypos, также будет как с метками на точки останова, тока тут на экран будет выводиться ( на бордюр или на основной, где луч) например мигающая полоска из 8 битов, также будет кул если можно будет написать label1 raypos и можно будет в эмуле посмотреть значение переменной label1 которая будет показывать кол-во тактов от инта до метки
и например дерективу freetacts - сколько осталось до конца прерывания (в зависимости от типа выбранной машины конечно)

Очень удобно было бы для отладки мультиколораА что мешает использовать уже имеющиеся средства для этого? В ту часть окна дебагера, где по умолчанию находиться окно "watches" можно вывести "ray-painted screen", на котором прекрасно видно, что рисует луч в данный момент. В окошке "regs" есть заначение "t" - кол-во тактов, прошедших с момента инта. Оставшееся время можно вычислить простым вычитанием ;) Что ещё для счастья надо? =)) Если только добавить возможность с помощью условных брикпоинтов вываливаться в отладчик при достижении луча какого-либо значения - но я слабо представляю практическую пользу этого нововведения :)

Antipod
26.01.2009, 12:36
Надеюсь с sjasmplus таких проблем не было :)с ассемблером все ок)
Ну и немного подправил анреал:
1. в loadsnap: очистка execution breakpoints и потом loadbpx, тость щас брякопинты подгружаются при открытии снапшота ( старые удаляются ). [Я не перезапускаю эмуль каждый раз как делаю компиляцию - вместо этого открываю снапшот заново по F3.]
2. ну и по мелочи: убрал надоедливый месаж бокс, что user.l был обновлен. [По идее я сам знаю когда был изменен этот файл ( после каждой компиляции ) и оповещать меня об этом лишний раз с необходимостью нажимать кнопку "ок" явно лишнее.]

руль. %)