Основная проблема сейчас: в отладочной информации никак не отражена оптимизация. Например, в результате оптимизации переменные были размещены в регистрах, и доступ к локальным переменным через IX больше стал не нужен. В итоге, стандартный пролог функции PUSH IX/LD IX,0/ADD IX,SP был выкинут, к аргументам он адресуется через SP, но в отладочной информации об этом ни байта, более того, смещения к аргументам так и остались с учётом того, что в стек кладётся IX. Но с этой мелочью я справился (проверяю наличие пролога). Гораздо хуже, что иногда, несмотря на то, что переменная находится в стеке, и в отладочной информации именно это и сказано, переменная временно располагается в регистре, т.е. при отладке по шагам показываемое значение переменной (из стека) не соответствует реальному значению, т.е. переменная как-бы не меняется, хотя на самом деле это не так. А ещё, бывает, в отладочной информации сказано, что переменная в регистре, а имя регистра не указано (пустая строка). Вот так.
---------- Post added at 14:56 ---------- Previous post was at 14:49 ----------
А ещё, такие перлы:
Код:
ld 4 (ix),l
C$conio.c$99$1$30 = .
.globl C$conio.c$99$1$30
;conio.c:99: } while (value != 0);
ld 5 (ix), h
ld a, h
or a,4 (ix)
jr NZ,00101$
Здесь: ld 5 (ix), h сохранение старшего байта переменной, относящееся к строке 98, и если мы стоим на строке 99, оно ещё не выполнилось. Отладчик покажет половину старого и половину нового значения переменной