winedbg: Allow user to specify length of stack info output.
This commit is contained in:
parent
084d5f1f6c
commit
d3f80c1e9f
|
@ -274,7 +274,8 @@ info_command:
|
|||
| tINFO tALLREGS { be_cpu->print_context(dbg_curr_thread->handle, &dbg_context, 1); }
|
||||
| tINFO tSEGMENTS expr_rvalue { info_win32_segments($3 >> 3, 1); }
|
||||
| tINFO tSEGMENTS { info_win32_segments(0, -1); }
|
||||
| tINFO tSTACK { stack_info(); }
|
||||
| tINFO tSTACK tNUM { stack_info($3); }
|
||||
| tINFO tSTACK { stack_info(-1); }
|
||||
| tINFO tSYMBOL tSTRING { symbol_info($3); }
|
||||
| tINFO tLOCAL { symbol_info_locals(); }
|
||||
| tINFO tDISPLAY { display_info(); }
|
||||
|
|
|
@ -384,7 +384,7 @@ extern void source_nuke_path(struct dbg_process* p);
|
|||
extern void source_free_files(struct dbg_process* p);
|
||||
|
||||
/* stack.c */
|
||||
extern void stack_info(void);
|
||||
extern void stack_info(int len);
|
||||
extern void stack_backtrace(DWORD threadID);
|
||||
extern BOOL stack_set_frame(int newframe);
|
||||
extern BOOL stack_get_current_frame(IMAGEHLP_STACK_FRAME* ihsf);
|
||||
|
|
|
@ -106,7 +106,7 @@ void info_help(void)
|
|||
" info segments <pid> Displays information about all known segments",
|
||||
" info share Displays all loaded modules",
|
||||
" info share <addr> Displays internal module state",
|
||||
" info stack Dumps information about top of stack",
|
||||
" info stack [<len>] Dumps information about top of stack, up to len words",
|
||||
" info symbol <sym> Displays information about a given symbol",
|
||||
" info thread Shows all running threads",
|
||||
" info wnd <handle> Displays internal window state",
|
||||
|
|
|
@ -33,12 +33,15 @@
|
|||
/***********************************************************************
|
||||
* stack_info
|
||||
*
|
||||
* Dump the top of the stack
|
||||
* Dump the top of the stack. If len <= 0, a default length is used.
|
||||
*/
|
||||
void stack_info(void)
|
||||
void stack_info(int len)
|
||||
{
|
||||
struct dbg_lvalue lvalue;
|
||||
|
||||
if(len <= 0)
|
||||
len = 24;
|
||||
|
||||
lvalue.cookie = 0;
|
||||
lvalue.type.id = dbg_itype_segptr;
|
||||
lvalue.type.module = 0;
|
||||
|
@ -51,14 +54,14 @@ void stack_info(void)
|
|||
switch (lvalue.addr.Mode)
|
||||
{
|
||||
case AddrModeFlat: /* 32-bit or 64-bit mode */
|
||||
memory_examine(&lvalue, 24, 'a');
|
||||
memory_examine(&lvalue, len, 'a');
|
||||
break;
|
||||
case AddrMode1632: /* 32-bit mode */
|
||||
memory_examine(&lvalue, 24, 'x');
|
||||
memory_examine(&lvalue, len, 'x');
|
||||
break;
|
||||
case AddrModeReal: /* 16-bit mode */
|
||||
case AddrMode1616:
|
||||
memory_examine(&lvalue, 24, 'w');
|
||||
memory_examine(&lvalue, len, 'w');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,7 +182,7 @@ static unsigned dbg_exception_prolog(BOOL is_debug, BOOL first_chance, const EXC
|
|||
{
|
||||
/* This is a real crash, dump some info */
|
||||
be_cpu->print_context(dbg_curr_thread->handle, &dbg_context, 0);
|
||||
stack_info();
|
||||
stack_info(-1);
|
||||
be_cpu->print_segment_info(dbg_curr_thread->handle, &dbg_context);
|
||||
stack_backtrace(dbg_curr_tid);
|
||||
}
|
||||
|
|
|
@ -389,7 +389,7 @@ static enum dbg_start minidump_do_reload(struct tgt_process_minidump_data* data)
|
|||
memory_get_current_pc(&addr);
|
||||
stack_fetch_frames(&dbg_context);
|
||||
be_cpu->print_context(dbg_curr_thread->handle, &dbg_context, 0);
|
||||
stack_info();
|
||||
stack_info(-1);
|
||||
be_cpu->print_segment_info(dbg_curr_thread->handle, &dbg_context);
|
||||
stack_backtrace(mes->ThreadId);
|
||||
source_list_from_addr(&addr, 0);
|
||||
|
|
Loading…
Reference in New Issue