#directory /usr/src/perl/perl-5.10.1/perl-5.10.1
#directory /usr/src/perl/perl-5.6.2
add-auto-load-safe-path /lib/x86_64-linux-gnu/libthread_db-1.0.so

set breakpoint pending on
break __asan_report_error

break Perl_croak_no_modify
#break XS_B__CC__autovivification
#break B.xs:1398
#break B.c:2044
#break B.xs:1858
#break oplist
#break Perl_do_openn
# require %INC
#break pp_ctl.c:3599
#run
#p/x sv_list[3299]
# panic free from wrong pool 5.18.1
#b util.c:252
#b sv.c:3737 if (GV*)dstr->sv_u.svu_gp

define run10plc
  run -Mblib -MByteLoader -Dtv bytecode10.plc
end
#set args -Dtv -Mblib -MByteLoader bytecode10.plc
# grep -Hn PL_no_modify *.c|perl -ne'/^([\w.]+:\d+)/ && print "break $1\n";'
#define break_no_modify
#  break av.c:342
#  break av.c:435
#  break av.c:540
#  break av.c:579
#  break av.c:648
#  break av.c:720
#  break av.c:851
#  break doop.c:640
#  break doop.c:1025
#  break doop.c:1111
#  break mg.c:615
#  break mg.c:2361
#  break pp.c:161
#  break pp.c:864
#  break pp.c:881
#  break pp.c:903
#  break pp_hot.c:401
#  break pp_hot.c:2098
#  break pp_hot.c:2966
#  break pp_sort.c:1569
#  break pp_sys.c:1027
#  break regcomp.c:4924
#  break regcomp.c:5225
#  break sv.c:3247
#  break sv.c:3365
#  break sv.c:3424
#  break sv.c:4331
#  break sv.c:4349
#  break sv.c:4748
#  break sv.c:6950
#  break sv.c:7113
#  break sv.c:8390
#  break universal.c:1353
#  break universal.c:1375
#  break universal.c:1396
#  break util.c:3430
#  break util.c:3433
#end

# break Dynaloader.xs:190
# break byteloader_filter
# break perl_destruct
# break byterun.c:77
# break byterun.c:1128
# break Perl_av_extend
# break byterun
# break bl_getc
# break Perl_pp_match
# break Perl_pad_new

# stack dump, sp or PL_sp or my_perl->Istack_sp?
define sp_dump
  if (my_perl && my_perl->broiled)
    p/x **my_perl->Istack_sp
    call Perl_sv_dump(my_perl, *my_perl->Istack_sp)
  else
    p/x **PL_sp
    Perl_sv_dump(*PL_sp)
  end
end
document sp_dump
 => Perl_sv_dump(PL_sp)
end

define op_dump
  if (my_perl && my_perl->broiled)
    p/x *my_perl->Iop
    call Perl_op_dump(my_perl, my_perl->Iop)
  else
    p/x *PL_op
    call Perl_op_dump(PL_op)
  end
end
document op_dump
 => Perl_op_dump(PL_op)
see `odump op`
end

define sv_dump
  p/x *sv
  call Perl_sv_dump(sv)
end
document sv_dump
 => Perl_sv_dump(sv)
see `sdump sv`
end

define tsv_dump
  p/x *sv
  call Perl_sv_dump(my_perl, sv)
end
document tsv_dump
 => Perl_sv_dump(sv)
see `sdump sv`
end

define odump
  p/x *$arg0
  call Perl_op_dump($arg0)
end
document odump
odump op => p/x *op; Perl_op_dump(op)
see `help op_dump` for PL_op
end

define todump
  p/x *$arg0
  call Perl_op_dump(my_perl, $arg0)
end
document todump
todump op => p/x *op; Perl_op_dump(op)
see `help op_dump` for PL_op
end

define sdump
  p/x *$arg0
  call Perl_sv_dump($arg0)
end
document sdump
sdump sv => p/x *sv; Perl_sv_dump(sv)
see `help tsdump`
end

define tsdump
  p/x *$arg0
  call Perl_sv_dump(my_perl, $arg0)
end
document tsdump
tsdump sv => p/x *sv; Perl_sv_dump(my_perl, sv)
see `help sdump`
end

define addr2sym
    if $argc == 1
        printf "[%u]: ", $arg0
        #whatis/ptype EXPR
        #info frame ADDR
        info symbol $arg0
    end
end
document addr2sym
Resolve the address (e.g. of one stack frame). Usage: addr2sym addr0
end