From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 728 invoked by alias); 11 Feb 2011 22:12:47 -0000 Received: (qmail 720 invoked by uid 22791); 11 Feb 2011 22:12:46 -0000 X-SWARE-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-outbound-1.vmware.com (HELO smtp-outbound-1.vmware.com) (65.115.85.69) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 11 Feb 2011 22:12:42 +0000 Received: from mailhost3.vmware.com (mailhost3.vmware.com [10.16.27.45]) by smtp-outbound-1.vmware.com (Postfix) with ESMTP id DD7A45400F for ; Fri, 11 Feb 2011 14:12:39 -0800 (PST) Received: from msnyder-server.eng.vmware.com (promd-2s-dhcp138.eng.vmware.com [10.20.124.138]) by mailhost3.vmware.com (Postfix) with ESMTP id D5DC6CD944 for ; Fri, 11 Feb 2011 14:12:39 -0800 (PST) Message-ID: <4D55B457.4090404@vmware.com> Date: Fri, 11 Feb 2011 22:12:00 -0000 From: Michael Snyder User-Agent: Thunderbird 2.0.0.24 (X11/20101201) MIME-Version: 1.0 To: "gdb-patches@sourceware.org" Subject: [rfc] 'thread tid' command Content-Type: multipart/mixed; boundary="------------080202030908060902080303" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-02/txt/msg00227.txt.bz2 This is a multi-part message in MIME format. --------------080202030908060902080303 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 683 This is purposefully rough, 'cause I hope for discussion. This is a new command to help manage large thread lists. I started with the idea "I want to find out which thread has target id 12345", then extended it to also handle the new concept of thread names (which thread has name 'foo'), and extra info as well (which thread has extra info that includes the string "xyz"). The syntax (I'm open to renaming etc.): thread tid [NAME | TARGET_ID | EXTRA_INFO] The output: Thread %d has name '%s' or Thread %d has target id '%s' or Thread %d has extra info '%s' The user can then use the given thread id as input to the thread command, info threads, etc. Comments? --------------080202030908060902080303 Content-Type: text/plain; name="tid.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="tid.txt" Content-length: 1966 Index: thread.c =================================================================== RCS file: /cvs/src/src/gdb/thread.c,v retrieving revision 1.131 diff -u -p -u -p -r1.131 thread.c --- thread.c 19 Jan 2011 17:21:36 -0000 1.131 +++ thread.c 11 Feb 2011 22:03:31 -0000 @@ -1313,6 +1323,34 @@ thread_name_command (char *arg, int from info->name = arg ? xstrdup (arg) : NULL; } +/* Show thread ids with a name, target pid, or extra info matching ARG. */ + +static void +tid_command (char *arg, int from_tty) +{ + struct thread_info *tp; + char *tmp; + + if (arg == NULL || *arg == '\0') + error (_("Command requires an argument.")); + + update_thread_list (); + + for (tp = thread_list; tp; tp = tp->next) + { + if (tp->name != NULL && strcmp (arg, tp->name) == 0) + printf_filtered ("Thread %d has name '%s'\n", tp->num, tp->name); + + tmp = target_pid_to_str (tp->ptid); + if (tmp != NULL && strstr (tmp, arg) != 0) + printf_filtered ("Thread %d has target id '%s'\n", tp->num, tmp); + + tmp = target_extra_thread_info (tp); + if (tmp != NULL && strstr (tmp, arg) != 0) + printf_filtered ("Thread %d has extra info '%s'\n", tp->num, tmp); + } +} + /* Print notices when new threads are attached and detached. */ int print_thread_events = 1; static void @@ -1418,11 +1460,15 @@ The new thread ID must be currently know add_cmd ("all", class_run, thread_apply_all_command, _("Apply a command to all threads."), &thread_apply_list); - add_cmd ("name", class_run, thread_name_command, + add_cmd ("name", no_class, thread_name_command, _("Set the current thread's name.\n\ Usage: thread name [NAME]\n\ If NAME is not given, then any existing name is removed."), &thread_cmd_list); + add_cmd ("tid", no_class, tid_command, _("\ +Show thread ids with a name, target pid, or extra info matching ARG."), + &thread_cmd_list); + if (!xdb_commands) add_com_alias ("t", "thread", class_run, 1); --------------080202030908060902080303--