This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Multithreaded debugging: strange thread switches
- From: Vladimir Prus <ghost at cs dot msu dot su>
- To: gdb at sources dot redhat dot com
- Date: Mon, 23 Jan 2006 18:20:32 +0300
- Subject: Multithreaded debugging: strange thread switches
Hello,
I'm observing strange behaviour when debugging with gdb using a custom stub.
I have two threads. After connecting, I say "next" several times and that
steps in thread 1. Then I say "thread 2" and "next". Gdb then stops again in
thread 1, not in thread 2 as I'd expected.
In the remote protocol I see "Hc1" packet after last "next" though I'd expect
"Hc2", and in infrun.c, function prepare_to_proceed, I see this:
if (!ptid_equal (wait_ptid, minus_one_ptid)
&& !ptid_equal (inferior_ptid, wait_ptid))
{
/* Switched over from WAIT_PID. */
CORE_ADDR wait_pc = read_pc_pid (wait_ptid);
if (wait_pc != read_pc ())
{
/* Switch back to WAIT_PID thread. */
inferior_ptid = wait_ptid;
/* FIXME: This stuff came from switch_to_thread() in
thread.c (which should probably be a public function). */
flush_cached_frames ();
registers_changed ();
stop_pc = wait_pc;
select_frame (get_current_frame ());
}
Can somebody explain the reason for this explicit switch back to "wait_ptid"?
Thanks,
Volodya