ddb: Enable 'thread <address>'
Currently, the 'thread' command (to switch the debugger to another thread) only accepts decimal-encoded tids. Use the same parsing logic as 'show thread <arg>' to accept hex-encoded thread pointers in addition to decimal-encoded tids. Document the 'thread' command in ddb.4 and expand the 'show thread' documentation to cover the tid usage. Reported by: bwidawsk Reviewed by: bwidawsk (earlier version), kib (earlier version), markj Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D16962
This commit is contained in:
parent
64aa915f8a
commit
e41793db2c
@ -60,7 +60,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd September 7, 2018
|
.Dd September 21, 2018
|
||||||
.Dt DDB 4
|
.Dt DDB 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -1013,13 +1013,17 @@ For exact interpretation of output, visit
|
|||||||
header file.
|
header file.
|
||||||
.\"
|
.\"
|
||||||
.Pp
|
.Pp
|
||||||
.It Ic show Cm thread Op Ar addr
|
.It Ic show Cm thread Op Ar addr | tid
|
||||||
If no
|
If no
|
||||||
.Ar addr
|
.Ar addr
|
||||||
|
or
|
||||||
|
.Ar tid
|
||||||
is specified, show detailed information about current thread.
|
is specified, show detailed information about current thread.
|
||||||
Otherwise, information about thread at
|
Otherwise, print information about the thread with ID
|
||||||
.Ar addr
|
.Ar tid
|
||||||
is printed.
|
or kernel address
|
||||||
|
.Ar addr .
|
||||||
|
(If the argument is a decimal number, it is assumed to be a tid.)
|
||||||
.\"
|
.\"
|
||||||
.Pp
|
.Pp
|
||||||
.It Ic show Cm threads
|
.It Ic show Cm threads
|
||||||
@ -1249,6 +1253,13 @@ rather than a traditional memory dump or minidump.
|
|||||||
reports whether a textdump has been scheduled.
|
reports whether a textdump has been scheduled.
|
||||||
.Ic textdump unset
|
.Ic textdump unset
|
||||||
cancels a request to perform a textdump as the next kernel core dump.
|
cancels a request to perform a textdump as the next kernel core dump.
|
||||||
|
.Pp
|
||||||
|
.It Ic thread Ar addr | tid
|
||||||
|
Switch the debugger to the thread with ID
|
||||||
|
.Ar tid ,
|
||||||
|
if the argument is a decimal number, or address
|
||||||
|
.Ar addr ,
|
||||||
|
otherwise.
|
||||||
.El
|
.El
|
||||||
.Sh VARIABLES
|
.Sh VARIABLES
|
||||||
The debugger accesses registers and variables as
|
The debugger accesses registers and variables as
|
||||||
|
@ -145,7 +145,7 @@ static struct command db_cmds[] = {
|
|||||||
{ "reset", db_reset, 0, NULL },
|
{ "reset", db_reset, 0, NULL },
|
||||||
{ "kill", db_kill, CS_OWN, NULL },
|
{ "kill", db_kill, CS_OWN, NULL },
|
||||||
{ "watchdog", db_watchdog, CS_OWN, NULL },
|
{ "watchdog", db_watchdog, CS_OWN, NULL },
|
||||||
{ "thread", db_set_thread, CS_OWN, NULL },
|
{ "thread", db_set_thread, 0, NULL },
|
||||||
{ "run", db_run_cmd, CS_OWN, NULL },
|
{ "run", db_run_cmd, CS_OWN, NULL },
|
||||||
{ "script", db_script_cmd, CS_OWN, NULL },
|
{ "script", db_script_cmd, CS_OWN, NULL },
|
||||||
{ "scripts", db_scripts_cmd, 0, NULL },
|
{ "scripts", db_scripts_cmd, 0, NULL },
|
||||||
|
@ -55,20 +55,10 @@ void
|
|||||||
db_set_thread(db_expr_t tid, bool hastid, db_expr_t cnt, char *mod)
|
db_set_thread(db_expr_t tid, bool hastid, db_expr_t cnt, char *mod)
|
||||||
{
|
{
|
||||||
struct thread *thr;
|
struct thread *thr;
|
||||||
db_expr_t radix;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/*
|
|
||||||
* We parse our own arguments. We don't like the default radix.
|
|
||||||
*/
|
|
||||||
radix = db_radix;
|
|
||||||
db_radix = 10;
|
|
||||||
hastid = db_expression(&tid);
|
|
||||||
db_radix = radix;
|
|
||||||
db_skip_to_eol();
|
|
||||||
|
|
||||||
if (hastid) {
|
if (hastid) {
|
||||||
thr = kdb_thr_lookup(tid);
|
thr = db_lookup_thread(tid, false);
|
||||||
if (thr != NULL) {
|
if (thr != NULL) {
|
||||||
err = kdb_thr_select(thr);
|
err = kdb_thr_select(thr);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user