* thread.c (thread_id_make_value): Make a value representing the
current thread. (_initialize_thread): Create $_thread. * gdb.texinfo (Debugging Programs with Multiple Threads): Describe $_thread. * gdb.threads/thread-specific.exp: Add tests of $_thread.
This commit is contained in:
parent
6508b958ff
commit
6aed2dbcba
@ -1,3 +1,9 @@
|
||||
2010-06-18 Stan Shebs <stan@codesourcery.com>
|
||||
|
||||
* thread.c (thread_id_make_value): Make a value representing the
|
||||
current thread.
|
||||
(_initialize_thread): Create $_thread.
|
||||
|
||||
2010-06-17 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* dwarf2read.c (psymtabs_addrmap_cleanup): Add empty line after
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-06-18 Stan Shebs <stan@codesourcery.com>
|
||||
|
||||
* gdb.texinfo (Debugging Programs with Multiple Threads): Describe
|
||||
$_thread.
|
||||
|
||||
2010-06-18 Hui Zhu <teawater@gmail.com>
|
||||
|
||||
* gdb.texinfo: (Process Record and Replay): Add documentation
|
||||
|
@ -2788,6 +2788,13 @@ As with the @samp{[New @dots{}]} message, the form of the text after
|
||||
@samp{Switching to} depends on your system's conventions for identifying
|
||||
threads.
|
||||
|
||||
@vindex $_thread@r{, convenience variable}
|
||||
The debugger convenience variable @samp{$_thread} contains the number
|
||||
of the current thread. You may find this useful in writing breakpoint
|
||||
conditional expressions, command scripts, and so forth. See
|
||||
@xref{Convenience Vars,, Convenience Variables}, for general
|
||||
information on convenience variables.
|
||||
|
||||
@kindex thread apply
|
||||
@cindex apply command to several threads
|
||||
@item thread apply [@var{threadno}] [@var{all}] @var{command}
|
||||
|
@ -1,3 +1,7 @@
|
||||
2010-06-18 Stan Shebs <stan@codesourcery.com>
|
||||
|
||||
* gdb.threads/thread-specific.exp: Add tests of $_thread.
|
||||
|
||||
2010-06-18 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
|
||||
|
||||
* gdb.base/gdb11531.exp: Respect gdb,no_hardware_watchpoints flag.
|
||||
|
@ -75,6 +75,8 @@ gdb_load ${binfile}
|
||||
gdb_test_no_output "set print sevenbit-strings"
|
||||
gdb_test_no_output "set width 0"
|
||||
|
||||
gdb_test {print $_thread} ".* = 0" "thread var when not running"
|
||||
|
||||
runto_main
|
||||
|
||||
gdb_breakpoint [gdb_get_line_number "thread-specific.exp: last thread start"]
|
||||
@ -88,6 +90,8 @@ if {[llength $threads] == 0} {
|
||||
return 1
|
||||
}
|
||||
|
||||
gdb_test {print $_thread} ".* = [lindex $threads 0]" "thread var in main"
|
||||
|
||||
gdb_test_multiple "break $line thread [lindex $threads 0]" \
|
||||
"breakpoint $line main thread" {
|
||||
-re "Breakpoint (\[0-9\]*) at.* file .*$srcfile, line.*$gdb_prompt $" {
|
||||
@ -104,9 +108,19 @@ gdb_test_multiple "continue" "continue to thread-specific breakpoint" {
|
||||
-re "Breakpoint $main_breakpoint, .* at .*\r\n$gdb_prompt $" {
|
||||
fail "continue to thread-specific breakpoint (wrong breakpoint)"
|
||||
}
|
||||
-re "Breakpoint .* at .*\r\n$gdb_prompt $" {
|
||||
-re "Breakpoint (\[0-9\]*), .* at .*\r\n$gdb_prompt $" {
|
||||
set this_breakpoint $expect_out(1,string)
|
||||
pass "continue to thread-specific breakpoint"
|
||||
}
|
||||
}
|
||||
|
||||
gdb_test_multiple "info breakpoint $this_breakpoint" "info on bp" {
|
||||
-re ".*stop only in thread (\[0-9\]*).*$gdb_prompt $" {
|
||||
set this_thread $expect_out(1,string)
|
||||
pass "found breakpoint for thread number"
|
||||
}
|
||||
}
|
||||
|
||||
gdb_test {print $_thread} ".* = $this_thread" "thread var at break"
|
||||
|
||||
return 0
|
||||
|
14
gdb/thread.c
14
gdb/thread.c
@ -1262,6 +1262,18 @@ update_thread_list (void)
|
||||
target_find_new_threads ();
|
||||
}
|
||||
|
||||
/* Return a new value for the selected thread's id. Return a value of 0 if
|
||||
no thread is selected, or no threads exist. */
|
||||
|
||||
static struct value *
|
||||
thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var)
|
||||
{
|
||||
struct thread_info *tp = find_thread_ptid (inferior_ptid);
|
||||
|
||||
return value_from_longest (builtin_type (gdbarch)->builtin_int,
|
||||
(tp ? tp->num : 0));
|
||||
}
|
||||
|
||||
/* Commands with a prefix of `thread'. */
|
||||
struct cmd_list_element *thread_cmd_list = NULL;
|
||||
|
||||
@ -1295,4 +1307,6 @@ Show printing of thread events (such as thread start and exit)."), NULL,
|
||||
NULL,
|
||||
show_print_thread_events,
|
||||
&setprintlist, &showprintlist);
|
||||
|
||||
create_internalvar_type_lazy ("_thread", thread_id_make_value);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user