Implement a show panic
command to DDB which will helpfully print the
panic string again if set, in case it scrolled out of the active window. This avoids having to remember the symbol name. Also add a show callout <addr> command to DDB in order to inspect some struct callout fields in case of panics in the callout code. This may help to see if there was memory corruption or to further ease debugging problems. Obtained from: projects/vnet MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Reviewed by: jhb (comment only on the show panic initally) Differential Revision: https://reviews.freebsd.org/D4527
This commit is contained in:
parent
a107889f3e
commit
2919ef7927
@ -60,7 +60,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd May 18, 2016
|
||||
.Dd June 6, 2016
|
||||
.Dt DDB 4
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -599,6 +599,13 @@ See the
|
||||
header file for more details on the exact meaning of the structure fields.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ic show Cm callout Ar addr
|
||||
Show information about the callout structure
|
||||
.Vt struct callout
|
||||
present at
|
||||
.Ar addr .
|
||||
.\"
|
||||
.Pp
|
||||
.It Ic show Cm cbstat
|
||||
Show brief information about the TTY subsystem.
|
||||
.\"
|
||||
@ -834,6 +841,10 @@ option is specified the
|
||||
complete object is printed.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ic show Cm panic
|
||||
Print the panic message if set.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ic show Cm page
|
||||
Show statistics on VM pages.
|
||||
.\"
|
||||
|
@ -929,3 +929,14 @@ mkdumpheader(struct kerneldumpheader *kdh, char *magic, uint32_t archver,
|
||||
strlcpy(kdh->panicstring, panicstr, sizeof(kdh->panicstring));
|
||||
kdh->parity = kerneldump_parity(kdh);
|
||||
}
|
||||
|
||||
#ifdef DDB
|
||||
DB_SHOW_COMMAND(panic, db_show_panic)
|
||||
{
|
||||
|
||||
if (panicstr == NULL)
|
||||
db_printf("panicstr not set\n");
|
||||
else
|
||||
db_printf("panic: %s\n", panicstr);
|
||||
}
|
||||
#endif
|
||||
|
@ -38,6 +38,7 @@
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "opt_callout_profiling.h"
|
||||
#include "opt_ddb.h"
|
||||
#if defined(__arm__)
|
||||
#include "opt_timer.h"
|
||||
#endif
|
||||
@ -60,6 +61,11 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/smp.h>
|
||||
|
||||
#ifdef DDB
|
||||
#include <ddb/ddb.h>
|
||||
#include <machine/_inttypes.h>
|
||||
#endif
|
||||
|
||||
#ifdef SMP
|
||||
#include <machine/cpu.h>
|
||||
#endif
|
||||
@ -1615,3 +1621,34 @@ SYSCTL_PROC(_kern, OID_AUTO, callout_stat,
|
||||
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
|
||||
0, 0, sysctl_kern_callout_stat, "I",
|
||||
"Dump immediate statistic snapshot of the scheduled callouts");
|
||||
|
||||
#ifdef DDB
|
||||
static void
|
||||
_show_callout(struct callout *c)
|
||||
{
|
||||
|
||||
db_printf("callout %p\n", c);
|
||||
#define C_DB_PRINTF(f, e) db_printf(" %s = " f "\n", #e, c->e);
|
||||
db_printf(" &c_links = %p\n", &(c->c_links));
|
||||
C_DB_PRINTF("%" PRId64, c_time);
|
||||
C_DB_PRINTF("%" PRId64, c_precision);
|
||||
C_DB_PRINTF("%p", c_arg);
|
||||
C_DB_PRINTF("%p", c_func);
|
||||
C_DB_PRINTF("%p", c_lock);
|
||||
C_DB_PRINTF("%#x", c_flags);
|
||||
C_DB_PRINTF("%#x", c_iflags);
|
||||
C_DB_PRINTF("%d", c_cpu);
|
||||
#undef C_DB_PRINTF
|
||||
}
|
||||
|
||||
DB_SHOW_COMMAND(callout, db_show_callout)
|
||||
{
|
||||
|
||||
if (!have_addr) {
|
||||
db_printf("usage: show callout <struct callout *>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
_show_callout((struct callout *)addr);
|
||||
}
|
||||
#endif /* DDB */
|
||||
|
Loading…
Reference in New Issue
Block a user