Branch: Tag:

2018-11-28

2018-11-28 19:40:22 by William Welliver <william@welliver.org>

debugger: backtrace frame can now access and set locals when created by the debugger.

876:          if((stepping_mode != 0 && stepping_thread == th_self()) || ((Pike_fp->context->prog == bp_prog) && (bp_offset == (Pike_fp->pc - Pike_fp->context->prog->program)))) { -  int num_locals = 0; -  int fp_num_locals = Pike_fp->num_locals; -  struct svalue * current_local = Pike_fp->locals; +     printf("got a match!\n");    stepping_thread = th_self();   
897:    // TODO check we actually got the memory.    debugger_server = malloc(sizeof(struct svalue));    -  +     assign_svalue_no_free((debugger_server), Pike_sp-1);    add_ref_svalue((debugger_server));   
909:       ref_push_string(filep);    push_int(linep); -  push_int((long)Pike_fp); +     push_text(get_opcode_name(instr));       ref_push_object(Pike_fp->current_object);    -  while(num_locals < fp_num_locals) { -  push_svalue(current_local); -  add_ref_svalue(Pike_sp - 1); -  current_local++; -  num_locals++; -  } -  -  f_aggregate(num_locals); -  f_backtrace(0); +  f_debug_backtrace(0);    //printf("applying\n");       // we don't want to step though any of the do_breakpoint() instructions that actually wake up the debugger.    // this seems safe for the basic scenario, but perhaps we should do this on another thread altogether?    stepping_mode = 0;    -  safe_apply_svalue(debugger_server, 7, 1); +  safe_apply_svalue(debugger_server, 5, 1);    //printf("applied\n");    if(TYPEOF(*(Pike_sp - 1)) != T_INT)    {