Step Over Halt и необновляемый labelslist

Bugs (reports, fixes, etc.)

Postby sq_skrju » 31 Mar 2019, 13:20

Воспроизводится на 0.38.4 и 0.39.0, раньше не проверял.

Я на самом деле не уверен, баги это или нормальное поведение. Но запортить всё равно надо :)

1. При трассировке Step over HALT входит в обработчик прерывания, хотя ожидаемо он не должен входить туда по Step over, а только по Step into. Так и задумано или баг?

2. При загрузке заново скомилированного снапшота иногда не подгружаются метки из файла USER.L. Как воспроизвести пошагово:

    1) Скомпилировать снапшот qsave1.sna с labeslist в файле user.l в папку unreal.
    2) Загрузить снапшот по Quick load.
    3) Метки подгрузятся, в дебаггере их видно.
    4) Изменить что-то в исходнике, снова выгрузить этот же снапшот по старому пути.
    5) Снова загрузить снапшот по Quick Load
    6) Некоторые метки остаются, некоторые пропадают и вместо них видно абсолютный адрес (см. скриншоты)

Вот исходный снапшот (шаги 1-3):
Screenshot 2019-03-31 at 12.41.33.png


Вот снапшот после изменения и перекомпиляции (шаги 4-6):
Screenshot 2019-03-31 at 12.42.02.png


На всякий случай прикладываю исходник:
test.zip
(2.32 KB) Downloaded 230 times
(надо будет прописать путь к эмулятору)
А так же список меток:
user.zip
(428 Bytes) Downloaded 223 times
(форум ругается на расширение .l, поэтому поместил в архив)

Вероятно, это нормальное поведение, т.к. список меток не обновляется с подгрузкой снапшота, а загружается один раз при запуске эмулятора, верно?
Если это так, то можно ли сделат, чтобы user.l подгружался вместе с обновлением файла (с загрузкой нового снапшота, например).

Спасибо!
sq_skrju
 
Posts: 7
Joined: 07 Dec 2018, 02:07
Group: Registered users

Postby deathsoft » 31 Mar 2019, 23:21

sq_skrju wrote:Вероятно, это нормальное поведение, т.к. список меток не обновляется с подгрузкой снапшота, а загружается один раз при запуске эмулятора, верно?
Если это так, то можно ли сделат, чтобы user.l подгружался вместе с обновлением файла (с загрузкой нового снапшота, например).

Файл user.l перезагружается автоматически, если в нем были изменения (делается через directory change notification (возможно глючит под wine в macos)). Проверка изменений делается в debug loop (основном цикле дебагера).
User avatar
deathsoft
 
Posts: 4742
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 31 Mar 2019, 23:33

sq_skrju wrote:1. При трассировке Step over HALT входит в обработчик прерывания, хотя ожидаемо он не должен входить туда по Step over, а только по Step into. Так и задумано или баг?

Halt по step over так и задуман (так было у SMT), делается сразу переход на обработчик прерывания, а по step into - крутится на самом halt (пока счетчик тактов не дойдет до нуля), далее входит в обработчик.
User avatar
deathsoft
 
Posts: 4742
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby sq_skrju » 01 Apr 2019, 01:10

deathsoft wrote:Файл user.l перезагружается автоматически, если в нем были изменения (делается через directory change notification (возможно глючит под wine в macos)). Проверка изменений делается в debug loop (основном цикле дебагера).


Да, видимо глючит wine, спасибо за наводку :) Никакого воркэраунда нет, если у меня никак не получится пофиксить баг на стороне wine?

deathsoft wrote:Halt по step over так и задуман (так было у SMT), делается сразу переход на обработчик прерывания


Раньше точно было не так - в 0.37.5 - я только что специально проверил - Step over переходит на команду, следующую после halt. Мне кажется, это удобнее. Часто приходится трейсить циклы с хальтами, и неудобно каждый раз вываливаться в обработчик. Чаще всего обработчик вообще не нужно трейсить, так что Step over в него, как мне кажется, избыточен. Если нужно в него попасть, удобнее поставить на него брейкпоинт.
sq_skrju
 
Posts: 7
Joined: 07 Dec 2018, 02:07
Group: Registered users

Postby deathsoft » 01 Apr 2019, 01:30

sq_skrju wrote:Никакого воркэраунда нет, если у меня никак не получится пофиксить баг на стороне wine?

Я не знаю, у меня нету wine и макоси.

sq_skrju wrote:Часто приходится трейсить циклы с хальтами, и неудобно каждый раз вываливаться в обработчик. Чаще всего обработчик вообще не нужно трейсить, так что Step over в него, как мне кажется, избыточен. Если нужно в него попасть, удобнее поставить на него брейкпоинт.

Чем не устраивает нажать F4 после halt? Будет ровно ожидаемый эффект, halt будет мгновенно пропущен (и обработчик прерывания тоже).
User avatar
deathsoft
 
Posts: 4742
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 01 Apr 2019, 01:43

sq_skrju wrote:Раньше точно было не так - в 0.37.5 - я только что специально проверил - Step over переходит на команду, следующую после halt.

Посмотрел историю изменения сорцов, трассировку обработчика прерывания добавил я, еще в 2016 году "Трассировка halt по step over делается автотрассировка до первой инструкции обработчика прерывания.". Иначе в боработчик прерывания вообще не попасть будет, особенно, если его адрес неизвестен. А если надо проскипать halt и обработчик, то надо просто F4 (run here) на следующей за halt инструкцией жать.
User avatar
deathsoft
 
Posts: 4742
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 01 Apr 2019, 14:17

Перезагрузка user.l делается при создании/изменении любого файла в каталоге unreal'а (directory change notification стоит на каталог из которого запущен unreal), т.е. даже не обязательно сам user.l менять. При нажатии на F7 или любые другие кнопки в дебагере происходит перезагрузка файла (и об этом пишется строчка в консоль, путь к user.l и число загруженных меток).
User avatar
deathsoft
 
Posts: 4742
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 01 Apr 2019, 14:25

Скомпилил тестовый пример, нашел, что sjamsplus https://github.com/sjasmplus/sjasmplus/ ... 90306.1.7z генерит user.l с багами:
Code: Select all
05:2000 start
00:0000 screen_address
02:0000 dot_tab
02:0400 stars_tab
02:3E00 im_tab
:0047 color                 <========== нету номера страницы
:000A stars_count       <========== нету номера страницы
05:206C init
05:2022 stars_init


color и stars_count - это вообще просто константы, а не метки адреса, а тупой sjasm их зачем то в user.l пихает, хотя туда должны попадать только метки-адреса.

При загрузке соответственно пишет ошибки:
Code: Select all
error in H:\zx\unreal\user.l, line 6
error in H:\zx\unreal\user.l, line 7
loaded 39 labels from
H:\zx\unreal\user.l
Last edited by deathsoft on 01 Apr 2019, 15:42, edited 1 time in total.
User avatar
deathsoft
 
Posts: 4742
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 01 Apr 2019, 14:34

Проверил с модификацией сорца и загрузкой снапшота по Alt-F3 (quick load), все метки после перезагрузки присутствуют (в консоле пишется строчка о перезагрузке меток). Т.ч. видимо проблема в directory notifications в wine, если есть возможность попробуй в виртуалке под виндой, проявится там баг или нет.

Если баг в wine, то можно сделать короткий пример на directory notification и отправить им багрепорт, чтобы исправили.
User avatar
deathsoft
 
Posts: 4742
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby lvd » 01 Apr 2019, 17:28

Репортить в вайн то еще развлечение, вначале квест 'собери самый свежий вайн' (никто ж не будет править в древнем говне), хотя в принципе нестрашно, потом оказывается что они копирасты и проверять на кряканом софте им западло.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7261
Joined: 07 Apr 2007, 21:28
Group: Registered users

Next

Return to Ошибки

Who is online

Users browsing this forum: No registered users and 1 guest

cron