mi/2375: gdb crashes when used from kdevelop

alexandre.nunes@gmail.com alexandre.nunes@gmail.com
Mon Dec 3 13:58:00 GMT 2007


>Number:         2375
>Category:       mi
>Synopsis:       gdb crashes when used from kdevelop
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Dec 03 13:58:01 UTC 2007
>Closed-Date:
>Last-Modified:
>Originator:     alexandre.nunes@gmail.com
>Release:        gdb-6.7.1
>Organization:
>Environment:
Linux x86 glibc
>Description:
When used from within kdevelop, gdb crashes after inspecting a nested variable (i.e. an array and it's elements). It seems like kdevelop creates childs to handle the array, then deletes  then, and finally attempts to delete the variable itself. at that point gdb crashes.

The backtrace will be attached to the report, as long as all commands exchanged between kdevelop and gdb via mi2 interface. (kdevelop adds stupid html tags, please ignore then as they're only informative).




>How-To-Repeat:
Create a file more or less like this:

static int fd[2];

int dothetrick(void)
{
   pipe(fd); // put a breakpoint here.
}

int main()
{
  dothetrick();
}

... create a project on kdevelop having that file generate an executable, ask to debug it, putting a breakpoint on the above mentioned line, and run it.

When it stops, put a watch on the fd variable, and click on the plus sign at the watch list, in order to see the values for fd[0] and fd[1].

Type F10 in order to step over.

At that point, gdb 6.7.1 crashes. The kdevelop gdb comm trace shows that the last command was a delete-variable.

The whole comm trace is attached to the PR.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="gdb_cmdtrace.txt"
Content-Disposition: inline; filename="gdb_cmdtrace.txt"

gdb /home/alex/devel/massa/medserv-naftalina/src/medserv --interpreter=mi2 -quiet<font color="blue">(gdb) set print static-members off</font>
Using host libthread_db library "/lib/i686/cmov/libthread_db.so.1".
set print static-members off
^done
<font color="blue">(gdb) set width 0</font>
set width 0
^done
<font color="blue">(gdb) set height 0</font>
set height 0
^done
<font color="blue">(gdb) set stop-on-solib-events 1</font>
set stop-on-solib-events 1
^done
<font color="blue">(gdb) handle SIG32 pass nostop noprint</font>
handle SIG32 pass nostop noprint
Signal        Stop	Print	Pass to program	Description
SIG32         No	No	Yes		Real-time event 32
^done
<font color="blue">(gdb) handle SIG41 pass nostop noprint</font>
handle SIG41 pass nostop noprint
Signal        Stop	Print	Pass to program	Description
SIG41         No	No	Yes		Real-time event 41
^done
<font color="blue">(gdb) handle SIG42 pass nostop noprint</font>
handle SIG42 pass nostop noprint
Signal        Stop	Print	Pass to program	Description
SIG42         No	No	Yes		Real-time event 42
^done
<font color="blue">(gdb) handle SIG43 pass nostop noprint</font>
handle SIG43 pass nostop noprint
Signal        Stop	Print	Pass to program	Description
SIG43         No	No	Yes		Real-time event 43
^done
<font color="blue">(gdb) set print asm-demangle on</font>
set print asm-demangle on
^done
<font color="blue">(gdb) set output-radix 10</font>
set output-radix 10
Output radix now set to decimal 10, hex a, octal 12.
^done
<font color="blue">(gdb) cd /home/alex/devel/massa/medserv-naftalina/etc/</font>
cd /home/alex/devel/massa/medserv-naftalina/etc/
Working directory /home/alex/devel/massa/medserv-naftalina/etc.
^done
<font color="blue">(gdb) set args -d -f -s /dev/ttyUSB0</font>
set args -d -f -s /dev/ttyUSB0
^done
<font color="blue">(gdb) -break-insert /home/alex/devel/massa/medserv-naftalina/src/medcomm.c:50</font>
^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0804d974",func="medcomm_close",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="50",times="0"}
<font color="blue">(gdb) tty /dev/pts/3</font>
tty /dev/pts/3
^done
<font color="blue">(gdb) -exec-run</font>
^running
Stopped due to shared library event
*stopped,thread-id="0"
<font color="blue">(gdb) -break-condition 1 </font>
^done
<font color="blue">(gdb) -break-after 1 0</font>
^done
<font color="blue">(gdb) -break-enable 1</font>
^done
<font color="blue">(gdb) -exec-continue</font>
^running
[Thread debugging using libthread_db enabled]
[New Thread 0xb7cae6b0 (LWP 5199)]
Stopped due to shared library event
*stopped,thread-id="0"
<font color="blue">(gdb) -exec-continue</font>
^running
*stopped,reason="exited",exit-code="03"
<font color="blue">(gdb) tty /dev/pts/3</font>
tty /dev/pts/3
^done
<font color="blue">(gdb) -exec-run</font>
^running
Stopped due to shared library event
*stopped,thread-id="0"
<font color="blue">(gdb) -exec-continue</font>
^running
[Thread debugging using libthread_db enabled]
[New Thread 0xb7ca96b0 (LWP 5229)]
Stopped due to shared library event
*stopped,thread-id="0"
<font color="blue">(gdb) -exec-continue</font>
^running
[New Thread 0xb7ca8b90 (LWP 5230)]
[Switching to Thread 0xb7ca8b90 (LWP 5230)]
*stopped,reason="breakpoint-hit",bkptno="1",thread-id="2",frame={addr="0x0804d974",func="medcomm_close",args=[],file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="50"}
<font color="blue">(gdb) -file-list-exec-source-file</font>
^done,line="50",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c"
<font color="blue">(gdb) -break-list</font>
^done,BreakpointTable={nr_rows="1",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0804d974",func="medcomm_close",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="50",times="1"}]}
<font color="blue">(gdb) -stack-list-arguments 0 0 0</font>
^done,stack-args=[frame={level="0",args=[]}]
<font color="blue">(gdb) -stack-list-locals 0</font>
^done,locals=[]
<font color="blue">(gdb) -thread-list-ids</font>
^done,thread-ids={thread-id="2",thread-id="1"},number-of-threads="2"
<font color="blue">(gdb) info frame</font>
info frame
Stack level 0, frame at 0xb7ca8350:
 eip = 0x804d974 in medcomm_close (medcomm.c:50); saved eip 0x804d9d5
 called by frame at 0xb7ca8360
 source language c.
 Arglist at 0xb7ca8348, args: 
 Locals at 0xb7ca8348, Previous frame's sp is 0xb7ca8350
 Saved registers:
  ebp at 0xb7ca8348, eip at 0xb7ca834c
^done
<font color="blue">(gdb) -thread-select 2</font>
^done,new-thread-id="2",frame={level="0",addr="0x0804d974",func="medcomm_close",args=[],file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="50"}
<font color="blue">(gdb) -thread-select 1</font>
^done,new-thread-id="1",frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",args=[]}
<font color="blue">(gdb) -thread-select 2</font>
^done,new-thread-id="2",frame={level="0",addr="0x0804d974",func="medcomm_close",args=[],file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="50"}
<font color="blue">(gdb) -stack-info-depth 6</font>
^done,depth="6"
<font color="blue">(gdb) -stack-list-frames 0 5</font>
^done,stack=[frame={level="0",addr="0x0804d974",func="medcomm_close",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="50"},frame={level="1",addr="0x0804d9d5",func="medcomm_shutdown",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="64"},frame={level="2",addr="0x0804da3b",func="medcomm_setup",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="82"},frame={level="3",addr="0x0804d396",func="medproc_comm_thread",file="medproc.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medproc.c",line="805"},frame={level="4",addr="0xb7e8b4ff",func="g_thread_create_proxy",file="/tmp/buildd/glib2.0-2.14.3/glib/gthread.c",line="635"},frame={level="5",addr="0xb7e2746b",func="start_thread",from="/lib/i686/cmov/libpthread.so.0"}]
<font color="blue">(gdb) -var-update *</font>
^done,changelist=[]
<font color="blue">(gdb) print /x &sdownfd</font>
print /x &sdownfd
$1 = 0x805455c
^done
<font color="blue">(gdb) -var-create KDEV0 * "sdownfd"</font>
^done,name="KDEV0",numchild="2",value="[2]",type="int [2]"
<font color="blue">(gdb) -var-evaluate-expression "KDEV0"</font>
^done,value="[2]"
<font color="blue">(gdb) -var-list-children "KDEV0"</font>
^done,numchild="2",children=[child={name="KDEV0.0",exp="0",numchild="0",type="int"},child={name="KDEV0.1",exp="1",numchild="0",type="int"}]
<font color="blue">(gdb) -var-evaluate-expression "KDEV0.0"</font>
^done,value="-1"
<font color="blue">(gdb) -var-evaluate-expression "KDEV0.1"</font>
^done,value="-1"
<font color="blue">(gdb) -exec-next</font>
^running
*stopped,reason="end-stepping-range",thread-id="2",frame={addr="0x0804d995",func="medcomm_close",args=[],file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="55"}
<font color="blue">(gdb) -file-list-exec-source-file</font>
^done,line="55",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c"
<font color="blue">(gdb) -break-list</font>
^done,BreakpointTable={nr_rows="1",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0804d974",func="medcomm_close",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="50",times="1"}]}
<font color="blue">(gdb) -stack-list-arguments 0 0 0</font>
^done,stack-args=[frame={level="0",args=[]}]
<font color="blue">(gdb) -stack-list-locals 0</font>
^done,locals=[]
<font color="blue">(gdb) -thread-list-ids</font>
^done,thread-ids={thread-id="2",thread-id="1"},number-of-threads="2"
<font color="blue">(gdb) info frame</font>
info frame
Stack level 0, frame at 0xb7ca8350:
 eip = 0x804d995 in medcomm_close (medcomm.c:55); saved eip 0x804d9d5
 called by frame at 0xb7ca8360
 source language c.
 Arglist at 0xb7ca8348, args: 
 Locals at 0xb7ca8348, Previous frame's sp is 0xb7ca8350
 Saved registers:
  ebp at 0xb7ca8348, eip at 0xb7ca834c
^done
<font color="blue">(gdb) -thread-select 2</font>
^done,new-thread-id="2",frame={level="0",addr="0x0804d995",func="medcomm_close",args=[],file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="55"}
<font color="blue">(gdb) -thread-select 1</font>
^done,new-thread-id="1",frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",args=[]}
<font color="blue">(gdb) -thread-select 2</font>
^done,new-thread-id="2",frame={level="0",addr="0x0804d995",func="medcomm_close",args=[],file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="55"}
<font color="blue">(gdb) -stack-info-depth 6</font>
^done,depth="6"
<font color="blue">(gdb) -stack-list-frames 0 5</font>
^done,stack=[frame={level="0",addr="0x0804d995",func="medcomm_close",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="55"},frame={level="1",addr="0x0804d9d5",func="medcomm_shutdown",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="64"},frame={level="2",addr="0x0804da3b",func="medcomm_setup",file="medcomm.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medcomm.c",line="82"},frame={level="3",addr="0x0804d396",func="medproc_comm_thread",file="medproc.c",fullname="/home/alex/devel/massa/medserv-naftalina/src/medproc.c",line="805"},frame={level="4",addr="0xb7e8b4ff",func="g_thread_create_proxy",file="/tmp/buildd/glib2.0-2.14.3/glib/gthread.c",line="635"},frame={level="5",addr="0xb7e2746b",func="start_thread",from="/lib/i686/cmov/libpthread.so.0"}]
<font color="blue">(gdb) -var-delete "KDEV0.0"</font>
^done,ndeleted="1"
<font color="blue">(gdb) -var-delete "KDEV0.1"</font>
^done,ndeleted="1"
<font color="blue">(gdb) -var-delete "KDEV0"</font>
<font color="blue">(gdb) Process exited</font>



More information about the Gdb-prs mailing list