gdb has this code in infcmd.c: /* If we have no line info, switch to stepi mode. */ if (tp->control.step_range_end == 0 && step_stop_if_no_debug) tp->control.step_range_start = tp->control.step_range_end = 1; else if (tp->control.step_range_end == 0) { const char *name; if (find_pc_partial_function (pc, &name, &tp->control.step_range_start, &tp->control.step_range_end) == 0) error (_("Cannot find bounds of current function")); target_terminal_ours (); printf_filtered (_("Single stepping until exit from function %s," "\nwhich has no line number information.\n"), name); } Is there a reason to throw an error instead of just printing a message and returning control back to the user? Or, maybe - I didn't dig deeper, set name to "<unknown>" or some such if find_pc_partial_function fails. [I also didn't dig deeper to see if taking a step back and reworking this code would be better.]
It's not about the name -- it's about the step range. That is, what find_pc_partial_function ends up in step_range_start/step_range_end. Another alternative would be to switch to si mode, like with there's no line info.
Ah. The point is throwing an error seems wrong.