samstyle / Xpeccy

Multiplatform emulator of retro computers
MIT License
71 stars 13 forks source link

Переход к caller function, история прыжков. #36

Closed Volutar closed 1 year ago

Volutar commented 5 years ago

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

А также при вбивании нового адреса в дебаггере происходит прыжок в это место. А обратно - никак. Только так же вручную. Нельзя ли сделать что-то типа истории (как в ida, как в браузерах), чтобы можно было возвращаться к предыдущим точкам, и снова вперёд. Логика фиксирования таких позиций:

  1. Прямой прыжок по адресу (напрямую набором адреса, или щелчком по стеку).
  2. Во время трассировки, jr/jp/djnz(дальше какого-то значения, за пределы экрана), call/rst, ret, nmi/interrupt.
  3. Во время активного скроллинга, фиксировать точки только при остановках дольше 5 секунд, и если они достаточно далеко от предыдущей позиции.

Прыгая по истории "назад" история "вперёд" должна оставаться живой, пока не будет необходимость фиксировать новую позицию.

samstyle commented 5 years ago

То, что пока есть - F4 переходит на адрес, указанный в команде с запоминанием текущего адреса, F5 возвращается на этот адрес, история ведётся. Переход к адресу на стеке применим только для Z80 (ну, может ещё для LR35902), которые на стек ложат только слова/адреса. MOS6502 ложит на стек 1, 2 или 3 байта в зависимости от ситуации. ВМ1 - 1 или 2 слова. Я стараюсь делать общий дебагер для всех CPU. IDA, к слову, строит дерево вызовов процесса, это проще, учитывая тот факт, что секция кода неизменяемая.

Volutar commented 5 years ago

MOS6502 ложит на стек 1, 2 или 3 байта в зависимости от ситуации.

У MOS6502 нет и экрана ZX, однако он отображается в дебагере.

То, что пока есть - F4 переходит на адрес, указанный в команде с запоминанием текущего адреса, F5 возвращается на этот адрес, история ведётся.

Спасибо, не знал. А нет клавиш с таким же прыжком но окна DUMP? Вот допустим LD HL, table_1 с F4 весьма бесполезна - дизасм таблицы бессмысленен.

И, может сделать клик по SP аналогом F4, так что F5 вернёт назад?

samstyle commented 5 years ago

У MOS6502 нет и экрана ZX, однако он отображается в дебагере.

Уже проупдатено. В nes этой вкладки нет, только у компов, внесённых в группу "спектрумы". Вобщем, будем думать. Дополнить историю переходов по введению адреса вполне можно.

ЗЫ: В дизасме можно сделать не только код. Он вполне отображает байты (db n), слова, адреса (dw nn) и текстовые строки (db "text"). Но это пока до конца не допилено.

Volutar commented 5 years ago

Уже проупдатено.

Благодарю. :)

Он вполне отображает байты (db n), слова, адреса (dw nn) и текстовые строки (db "text"). Но это пока до конца не допилено.

Да я заметил но не понял ситуаций когда это может быть как-то использовано. типа memory map из компилера? В IDA они делают recursive code traversing, т.е. пред-исполняют и помечают типы данных. Но для встроенного в эмулятор дебагера это чересчур.