get_prev_frame, stop_reason != UNWIND_NO_REASON, add frame debug output.
The stop_reason != UNWIND_NO_REASON doesn't currently have "set debug frame" output. This patch makes it print the stop_reason enum value as a string. gdb/ 2013-11-28 Pedro Alves <palves@redhat.com> * frame.c (get_prev_frame_1) <stop_reason != UNWIND_NO_REASON>: Add "set debug frame" output. (frame_stop_reason_symbol_string): New function.
This commit is contained in:
parent
50fd528a13
commit
a730086980
@ -1,3 +1,9 @@
|
||||
2013-11-28 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* frame.c (get_prev_frame_1) <stop_reason != UNWIND_NO_REASON>:
|
||||
Add "set debug frame" output.
|
||||
(frame_stop_reason_symbol_string): New function.
|
||||
|
||||
2013-11-28 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* frame-unwind.c (default_frame_unwind_stop_reason): Return
|
||||
|
33
gdb/frame.c
33
gdb/frame.c
@ -48,6 +48,7 @@
|
||||
|
||||
static struct frame_info *get_prev_frame_1 (struct frame_info *this_frame);
|
||||
static struct frame_info *get_prev_frame_raw (struct frame_info *this_frame);
|
||||
static const char *frame_stop_reason_symbol_string (enum unwind_stop_reason reason);
|
||||
|
||||
/* We keep a cache of stack frames, each of which is a "struct
|
||||
frame_info". The innermost one gets allocated (in
|
||||
@ -1771,7 +1772,18 @@ get_prev_frame_1 (struct frame_info *this_frame)
|
||||
&this_frame->prologue_cache);
|
||||
|
||||
if (this_frame->stop_reason != UNWIND_NO_REASON)
|
||||
return NULL;
|
||||
{
|
||||
if (frame_debug)
|
||||
{
|
||||
enum unwind_stop_reason reason = this_frame->stop_reason;
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog, "-> ");
|
||||
fprint_frame (gdb_stdlog, NULL);
|
||||
fprintf_unfiltered (gdb_stdlog, " // %s }\n",
|
||||
frame_stop_reason_symbol_string (reason));
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Check that this frame's ID isn't inner to (younger, below, next)
|
||||
the next frame. This happens when a frame unwind goes backwards.
|
||||
@ -2479,6 +2491,25 @@ frame_stop_reason_string (enum unwind_stop_reason reason)
|
||||
}
|
||||
}
|
||||
|
||||
/* Return the enum symbol name of REASON as a string, to use in debug
|
||||
output. */
|
||||
|
||||
static const char *
|
||||
frame_stop_reason_symbol_string (enum unwind_stop_reason reason)
|
||||
{
|
||||
switch (reason)
|
||||
{
|
||||
#define SET(name, description) \
|
||||
case name: return #name;
|
||||
#include "unwind_stop_reasons.def"
|
||||
#undef SET
|
||||
|
||||
default:
|
||||
internal_error (__FILE__, __LINE__,
|
||||
"Invalid frame stop reason");
|
||||
}
|
||||
}
|
||||
|
||||
/* Clean up after a failed (wrong unwinder) attempt to unwind past
|
||||
FRAME. */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user