This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Setting breakpoint misbehaving with all threads running in Non-Stop on Linux


Hi again,

I'm using HEAD (from yesterday) with Non-Stop locally on Linux.
I notice that when all my threads are running, setting a breakpoint
is misbehaving.

First, should I be able to set a breakpoint when all threads
are running (on Linux)?

Either way though, setting a bp reports an error -with-
a breakpoint id, and then 'info break' shows the breakpoint
as being set.  However, the breakpoint does not actually hit.

See below for the session.

Thanks

> gdb -i mi
~"GNU gdb (GDB) 6.8.50.20090430-cvs\n"
~"Copyright (C) 2009 Free Software Foundation, Inc.\n"
~"License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>\n"
~"This is free software: you are free to change and redistribute it.\n"
~"There is NO WARRANTY, to the extent permitted by law.  Type \"show
copying\"\n"
~"and \"show warranty\" for details.\n"
~"This GDB was configured as \"i686-pc-linux-gnu\".\n"
~"For bug reporting instructions, please see:\n"
~"<http://www.gnu.org/software/gdb/bugs/>.\n"
(gdb) 
file a.out
&"file a.out\n"
~"Reading symbols from /local/home/lmckhou/testing/a.out..."
~"done.\n"
^done
(gdb) 
l 1
&"l 1\n"
~"1\t#include <stdio.h>\n"
~"2\t#include <stdlib.h>\n"
~"3\t#include <pthread.h>\n"
~"4\t#include <unistd.h>\n"
~"5\t\n"
~"6\tvoid *thread_exec(void *ptr)\n"
~"7\t{\n"
~"8\t    int j = 0;\n"
~"9\t    for (int i=0;i<30;i++) {\n"
~"10\t        j++;\n"
^done
(gdb) 
l
&"l\n"
~"11\t        sleep(1);\n"
~"12\t    }\n"
~"13\t}\n"
~"14\t\n"
~"15\tint main()\n"
~"16\t{\n"
~"17\t    pthread_t thread2;\n"
~"18\t    char *message2 = \"Thread 2\";\n"
~"19\t\n"
~"20\t    pthread_create(&thread2, NULL, thread_exec, (void*)
message2);\n"
^done
(gdb) 
l
&"l\n"
~"21\t\n"
~"22\t    sleep(15);\n"
~"23\t\n"
~"24\t    pthread_join(thread2, NULL);\n"
~"25\t\n"
~"26\t    printf(\"Thread 2 finished\\n\");\n"
~"27\t\n"
~"28\t    return 0;\n"
~"29\t}\n"
^done
(gdb) 
set target-async on
&"set target-async on\n"
^done
(gdb) 
set pagination off
&"set pagination off\n"
^done
(gdb) 
set non-stop on
&"set non-stop on\n"
^done
(gdb) 
b 24
&"b 24\n"
~"Breakpoint 1 at 0x80485dc: file MultiThread.cc, line 24.\n"
^done
(gdb) 
run&
&"run&\n"
~"Starting program: /local/home/lmckhou/testing/a.out \n"
=thread-group-created,id="23591"
=thread-created,id="1",group-id="23591"
^running
*running,thread-id="1"
=library-loaded,id="/lib/ld-linux.so.2",target-name="/lib/ld-linux.so.2"
,host-name="/lib/ld-linux.so.2",symbols-loaded="0"
(gdb) 
=library-loaded,id="/lib/libpthread.so.0",target-name="/lib/libpthread.s
o.0",host-name="/lib/libpthread.so.0",symbols-loaded="0"
=library-loaded,id="/usr/lib/libstdc++.so.6",target-name="/usr/lib/libst
dc++.so.6",host-name="/usr/lib/libstdc++.so.6",symbols-loaded="0"
=library-loaded,id="/lib/libm.so.6",target-name="/lib/libm.so.6",host-na
me="/lib/libm.so.6",symbols-loaded="0"
=library-loaded,id="/lib/libgcc_s.so.1",target-name="/lib/libgcc_s.so.1"
,host-name="/lib/libgcc_s.so.1",symbols-loaded="0"
=library-loaded,id="/lib/libc.so.6",target-name="/lib/libc.so.6",host-na
me="/lib/libc.so.6",symbols-loaded="0"
~"[Thread debugging using libthread_db enabled]\n"
=thread-created,id="2",group-id="23591"
~"[New Thread 0xb7d6cba0 (LWP 23598)]\n"
*running,thread-id="2"
info th
&"info th\n"
~"  2 Thread 0xb7d6cba0 (LWP 23598)  (running)\n"
~"* 1 Thread 0xb7d6d6b0 (LWP 23591)  (running)\n"
^done
(gdb) 

== Here all threads are running ==

b 10
&"b 10\n"
~"Breakpoint 2 at 0x804857a: file MultiThread.cc, line 10.\n"
&"Warning:\n"
&"Cannot insert breakpoint 2.\n"
&"Error accessing memory address 0x804857a: Input/output error.\n"
&"\n"
^error,msg="Warning:\nCannot insert breakpoint 2.\nError accessing
memory address 0x804857a: Input/output error.\n"

== error but bp is shown in 'info break' (see below) ==
(gdb) 
b 11
&"b 11\n"
~"Breakpoint 3 at 0x804857e: file MultiThread.cc, line 11.\n"
&"Warning:\n"
&"Cannot insert breakpoint 2.\n"
&"Error accessing memory address 0x804857a: Input/output error.\n"
&"Cannot insert breakpoint 3.\n"
&"Error accessing memory address 0x804857e: Input/output error.\n"
&"\n"
^error,msg="Warning:\nCannot insert breakpoint 2.\nError accessing
memory address 0x804857a: Input/output error.\nCannot insert breakpoint
3.\nError accessing memory address 0x804857e: Input/output error.\n"

== Cummulative error above ==

(gdb) 
info b
&"info b\n"
~"Num     Type           Disp Enb Address    What\n"
~"1       breakpoint     keep y   0x080485dc in main at
MultiThread.cc:24\n"
~"2       breakpoint     keep y   0x0804857a in thread_exec(void*) at
MultiThread.cc:10\n"
~"3       breakpoint     keep y   0x0804857e in thread_exec(void*) at
MultiThread.cc:11\n"
^done

== Both 'failed' breakpoints show as installed, but they ==
== don't actually stop the thread.                       ==

(gdb) 
*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={addr="0x0
80485dc",func="main",args=[],file="MultiThread.cc",fullname="/local/home
/lmckhou/testing/MultiThread.cc",line="24"},thread-id="1",stopped-thread
s=["1"]




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]