123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #
- # This is very much a work in progress to show how we can use macros to make the
- # GDB interface a lot more useable. For example the next / step commands only
- # work if the stepper doesn't leave the current scope. Beyond that you have a
- # single hardware breakpoint which can be used as an hb or a wa. You have to
- # remember to delete the previous one, so the br macro does this for you.
- #
- set confirm off
- set print null-stop
- define br
- d
- hb $arg0
- end
- set pagination off
- define prTV
- if $arg0
- set $type = $arg0.tt
- set $val = $arg0.value
- if $type == 0
- # NIL
- printf "Nil\n"
- end
- if $type == 1
- # Boolean
- printf "Boolean: %u\n", $val->n
- end
- if $type == 2
- # ROTable
- printf "ROTable: %p\n", $val->p
- end
- if $type == 3
- # Light Function
- printf "Light Func: %p\n",p $arg $val->p
- end
- if $type == 4
- # Light User Data
- printf "Light Udata: %p\n", $val->pend
- end
- if $type == 5
- # Number
- printf "Boolean: %u\n", $val->n
- end
- if $type == 6
- # TString
- set $o = &($val.gc->ts.tsv)
- printf "Common header: next = %p, marked = 0x%01x\n", $o->next, $o->marked
- printf "String: hash = 0x%08x, len = %u : %s\n", $o->hash, $o->len, (char *)($ts+1)
- end
- if $type == 7
- # Table
- __printComHdr $arg0
- set $ts = (TString *)$val->p
- end
- if $type == 8
- # Function
- set $o = &($val->gc.cl.c)
- printf "Common header: next = %p, marked = 0x%01x\n", $o->next, $o->marked
- if $o->isC == 0
- set $o = &($val->gc.cl.l)
- printf "LClosure: nupvalues = %u, gclist = %p, env = %p, p = %p\n", $o->nupvalues, $o->gclist, $o->env, $o->p
- else
- printf "CClosure: nupvalues = %u, gclist = %p, env = %p, f = %p\np", $o->nupvalues, $o->gclist, $o->env, $o->f
- end
- end
- if $type == 9
- # UserData
- end
- if $type == 10
- # Thread
- end
- end
- end
- define prL
- if L > 0
- printf " stack: %u\n", L->top-L->base
- printf " hooking: %u, %u, %u, %u, %p\n", L->hookmask, L->allowhook, L->basehookcount, L->hookcount, L->hook
- end
- end
- define dumpstrt
- set $st = $arg0
- set $i = 0
- while $i< $st->size
- set $o = &(((TString *)($st->hash[$i]))->tsv)
- while $o
- if $o->next
- printf "Slot: %5i %p %p %08x %02x %4u", $i, $o, $o->next, $o->hash, $o->marked, $o->len
- else
- printf "Slot: %5i %p %08x %02x %4u", $i, $o, $o->hash, $o->marked, $o->len
- end
- if $o->marked & 0x80
- printf "* %s\n", *(char **)($o+1)
- else
- printf " %s\n", (char *)($o+1)
- end
- set $o = &(((TString *)($o->next))->tsv)
- end
- set $i = $i + 1
- end
- end
- define dumpRAMstrt
- dumpstrt &(L->l_G->strt)
- end
- set history save on
- set history size 1000
|