-
Notifications
You must be signed in to change notification settings - Fork 159
Some useful gdb commands for debugging Scryer Prolog
Mark Thom edited this page Mar 12, 2024
·
4 revisions
These work in the present Rust release (1.76) with stable-gnu set to the default in rustup. They’ll of course break as the underlying Rust APIs shift with new Rust releases, but that is the reason for posting them here.
define print-rust-string
printf "%s\n", $arg0.vec.buf.ptr.pointer.pointer
end
define cell-tag
print $arg0.get_tag()
end
define cell-value
print $arg0.get_value()
end
define index-cell
print *($arg0.buf.ptr.pointer.pointer + $arg1)
end
define print-scryer-atom
set $atom_table = scryer_prolog::atom_table::global_atom_table::GLOBAL_ATOM_TABLE
set $inner_tbl = $atom_table.value.value.value.value.data.value.ptr.pointer.data.inner.active_value.p.value
set $block_base = $inner_tbl.block.base
# 16 bytes is the size of &str on 64-bit machines, which are fat pointers
set $STRINGS_len = sizeof(scryer_prolog::atom_table::STRINGS) / 16
set $atom_idx = $arg0.index >> 3
if $atom_idx < $STRINGS_len
printf "%s\n", scryer_prolog::atom_table::STRINGS[$atom_idx]
else
printf "%s\n", $block_base + ($atom_idx - $STRINGS_len) * 8 + 8
end
end