svn commit: r339486 - in head: share/man/man4 sys/ddb

Conrad Meyer cem at FreeBSD.org
Sat Oct 20 20:45:50 UTC 2018


Author: cem
Date: Sat Oct 20 20:45:49 2018
New Revision: 339486
URL: https://svnweb.freebsd.org/changeset/base/339486

Log:
  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

Modified:
  head/share/man/man4/ddb.4
  head/sys/ddb/db_command.c
  head/sys/ddb/db_thread.c

Modified: head/share/man/man4/ddb.4
==============================================================================
--- head/share/man/man4/ddb.4	Sat Oct 20 20:41:25 2018	(r339485)
+++ head/share/man/man4/ddb.4	Sat Oct 20 20:45:49 2018	(r339486)
@@ -60,7 +60,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd September 7, 2018
+.Dd September 21, 2018
 .Dt DDB 4
 .Os
 .Sh NAME
@@ -1013,13 +1013,17 @@ For exact interpretation of output, visit
 header file.
 .\"
 .Pp
-.It Ic show Cm thread Op Ar addr
+.It Ic show Cm thread Op Ar addr | tid
 If no
 .Ar addr
+or
+.Ar tid
 is specified, show detailed information about current thread.
-Otherwise, information about thread at
-.Ar addr
-is printed.
+Otherwise, print information about the thread with ID
+.Ar tid
+or kernel address
+.Ar addr .
+(If the argument is a decimal number, it is assumed to be a tid.)
 .\"
 .Pp
 .It Ic show Cm threads
@@ -1249,6 +1253,13 @@ rather than a traditional memory dump or minidump.
 reports whether a textdump has been scheduled.
 .Ic textdump unset
 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
 .Sh VARIABLES
 The debugger accesses registers and variables as

Modified: head/sys/ddb/db_command.c
==============================================================================
--- head/sys/ddb/db_command.c	Sat Oct 20 20:41:25 2018	(r339485)
+++ head/sys/ddb/db_command.c	Sat Oct 20 20:45:49 2018	(r339486)
@@ -145,7 +145,7 @@ static struct command db_cmds[] = {
 	{ "reset",	db_reset,		0,	NULL },
 	{ "kill",	db_kill,		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 },
 	{ "script",	db_script_cmd,		CS_OWN,	NULL },
 	{ "scripts",	db_scripts_cmd,		0,	NULL },

Modified: head/sys/ddb/db_thread.c
==============================================================================
--- head/sys/ddb/db_thread.c	Sat Oct 20 20:41:25 2018	(r339485)
+++ head/sys/ddb/db_thread.c	Sat Oct 20 20:45:49 2018	(r339486)
@@ -55,20 +55,10 @@ void
 db_set_thread(db_expr_t tid, bool hastid, db_expr_t cnt, char *mod)
 {
 	struct thread *thr;
-	db_expr_t radix;
 	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) {
-		thr = kdb_thr_lookup(tid);
+		thr = db_lookup_thread(tid, false);
 		if (thr != NULL) {
 			err = kdb_thr_select(thr);
 			if (err != 0) {


More information about the svn-src-all mailing list