I have the following source code: #include <list> using namespace std; int main() { list<int> x; list<int> y; x.push_back(1); y.push_back(2); return 0; } I installed the python pretty printers for STL from the GNU website and load them in my .gdbinit. GDB crashes when I inspect the STL list. To reproduce from the command line: gdb -i mi -nx -enable-pretty-printing -gdb-set print object on source /home/amueller/.gdbinit -file-exec-and-symbols --thread-group i1 /home/amueller/testing/test -break-insert --thread-group i1 -f /home/amueller/testing/test.cpp:12 -break-insert --thread-group i1 -t -f main -exec-run --thread-group i1 -var-create --thread-group i1 - * x -var-create --thread 1 --frame 0 - * x -var-list-children var2 -exec-continue --thread 1 -var-update 1 var2 The bug was initially reported for Eclipse but also occurs using the command line gdb. See http://www.eclipse.org/forums/index.php/t/636361/
(In reply to Axel Müller from comment #0) > > I installed the python pretty printers for STL from the GNU website and load > them in my .gdbinit. Where can we get the python pretty printer? and how do you load them into GDB? > GDB crashes when I inspect the STL list. > > To reproduce from the command line: > gdb -i mi -nx > > -enable-pretty-printing > -gdb-set print object on > source /home/amueller/.gdbinit We don't know what your ~/.gdbinit is, so could you please give us the steps in your ~/.gdbinit?
I can also reproduce this bug using Axel's steps. This is the content of my ~/.gdbinit add-auto-load-safe-path /home/honza/dev python import sys sys.path.insert(0, '/home/honza/dev/gdb-pretty') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end set print pretty on set print object on set print static-members on set print vtbl on set print demangle on set demangle-style gnu-v3 On https://sourceware.org/gdb/wiki/STLSupport there is a description how to get the pretty printers. After passing the MI commands to GDB as Axel described, I'm getting following error ~"/home/zumbi/gdb-7.6.1/gdb/varobj.c:3532: internal-error: c_value_of_variable: Assertion `!value_lazy (var->value)' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit this debugging session? " ~"(y or n) " n ~"/home/zumbi/gdb-7.6.1/gdb/varobj.c:3532: internal-error: c_value_of_variable: Assertion `!value_lazy (var->value)' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nCreate a core file of GDB? " ~"(y or n) " n ^error,msg="unknown error" (gdb)
I can't reproduce it on GDB 7.6, 7.6.1 and mainline on X86-Fedora16. :( $ ./gdb -i mi --data-directory=./data-directory/ =thread-group-added,id="i1" ~"GNU gdb (GDB) 7.6\n" ~"Copyright (C) 2013 Free Software Foundation, Inc.\n" ~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n" ~"This GDB was configured as \"i686-pc-linux-gnu\".\nFor bug reporting instructions, please see:\n" ~"<http://www.gnu.org/software/gdb/bugs/>.\n" (gdb) set print pretty on &"set print pretty on\n" =cmd-param-changed,param="print pretty",value="on" ^done (gdb) set print object on &"set print object on\n" =cmd-param-changed,param="print object",value="on" ^done (gdb) set print static-members on &"set print static-members on\n" ^done (gdb) set print vtbl on &"set print vtbl on\n" =cmd-param-changed,param="print vtbl",value="on" ^done (gdb) set print demangle on &"set print demangle on\n" ^done (gdb) set demangle-style gnu-v3 &"set demangle-style gnu-v3\n" =cmd-param-changed,param="demangle-style",value="gnu-v3" ^done (gdb) -enable-pretty-printing ^done (gdb) -gdb-set print object on ^done (gdb) source /tmp/1.txt &"source /tmp/1.txt\n" ^done (gdb) -file-exec-and-symbols --thread-group i1 /tmp/1.exe ^done (gdb) -break-insert --thread-group i1 -f /tmp/1.cc:12 ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0804863e",func="main()",file="1.cc",fullname="/tmp/1.cc",line="12",thread-groups=["i1"],times="0",original-location="/tmp/1.cc:12"} (gdb) -break-insert --thread-group i1 -t -f main ^done,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x080485ee",func="main()",file="1.cc",fullname="/tmp/1.cc",line="6",thread-groups=["i1"],times="0",original-location="main"} (gdb) -exec-run --thread-group i1 =thread-group-started,id="i1",pid="11180" =thread-created,id="1",group-id="i1" ^running *running,thread-id="all" (gdb) =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",thread-group="i1" =library-loaded,id="/usr/lib/libstdc++.so.6",target-name="/usr/lib/libstdc++.so.6",host-name="/usr/lib/libstdc++.so.6",symbols-loaded="0",thread-group="i1" =library-loaded,id="/lib/libm.so.6",target-name="/lib/libm.so.6",host-name="/lib/libm.so.6",symbols-loaded="0",thread-group="i1" =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",thread-group="i1" =library-loaded,id="/lib/libc.so.6",target-name="/lib/libc.so.6",host-name="/lib/libc.so.6",symbols-loaded="0",thread-group="i1" =breakpoint-modified,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x080485ee",func="main()",file="1.cc",fullname="/tmp/1.cc",line="6",thread-groups=["i1"],times="1",original-location="main"} *stopped,reason="breakpoint-hit",disp="del",bkptno="2",frame={addr="0x080485ee",func="main",args=[],file="1.cc",fullname="/tmp/1.cc",line="6"},thread-id="1",stopped-threads="all",core="2" =breakpoint-deleted,id="2" (gdb) -var-create --thread-group i1 - * x ^done,name="var1",numchild="0",value="{...}",type="std::list<int, std::allocator<int> >",thread-id="1",dynamic="1",has_more="1" (gdb) -var-create --thread 1 --frame 0 - * x ^done,name="var2",numchild="0",value="{...}",type="std::list<int, std::allocator<int> >",thread-id="1",dynamic="1",has_more="1" (gdb) -var-list-children var2 ^done,numchild="3",children=[child={name="var2.[0]",exp="[0]",numchild="0",type="int",thread-id="1"},child={name="var2.[1]",exp="[1]",numchild="0",type="int",thread-id="1"},child={name="var2.[2]",exp="[2]",numchild="0",type="int",thread-id="1"}],has_more="0" (gdb) -exec-continue --thread 1 ^running *running,thread-id="all" (gdb) =breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0804863e",func="main()",file="1.cc",fullname="/tmp/1.cc",line="12",thread-groups=["i1"],times="1",original-location="/tmp/1.cc:12"} *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={addr="0x0804863e",func="main",args=[],file="1.cc",fullname="/tmp/1.cc",line="12"},thread-id="1",stopped-threads="all",core="0" (gdb) -var-update 1 var2 ^done,changelist=[{name="var2",value="{...}",in_scope="true",type_changed="false",new_num_children="1",dynamic="1",has_more="0"},{name="var2.[0]",value="1",in_scope="true",type_changed="false",has_more="0"}] (gdb) -gdb-exit ^exit =thread-exited,id="1",group-id="i1" =thread-group-exited,id="i1" $ cat /tmp/1.txt python import sys sys.path.insert(0, '/home/yao/Source/gnu/gdb_printers/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end
I have compiled GDB 7.6.2 from source and still can reproduce the bug. I'm running Debian testing. Can sharing the GDB corefile help? =thread-group-added,id="i1" ~"GNU gdb (GDB) 7.6.2\n" ~"Copyright (C) 2013 Free Software Foundation, Inc.\n" ~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n" ~"This GDB was configured as \"x86_64-unknown-linux-gnu\".\nFor bug reporting instructions, please see:\n" ~"<http://www.gnu.org/software/gdb/bugs/>.\n" (gdb) -enable-pretty-printing -gdb-set print object on source .gdbinit -file-exec-and-symbols --thread-group i1 /home/honza/dev/test/stl_test/stl_test -break-insert --thread-group i1 -f /home/honza/dev/test/stl_test/stl_test.cpp:12 -break-insert --thread-group i1 -t -f main -exec-run --thread-group i1 -var-create --thread-group i1 - * x -var-create --thread 1 --frame 0 - * x -var-list-children var2 -exec-continue --thread 1 -var-update 1 var2^done (gdb) ^done (gdb) &"\n" ^done (gdb) &"source .gdbinit\n" =cmd-param-changed,param="print pretty",value="on" =cmd-param-changed,param="print vtbl",value="on" =cmd-param-changed,param="demangle-style",value="gnu-v3" ^done (gdb) &"\n" ^done (gdb) ^done (gdb) ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0000000000400952",func="main()",file="stl_test.cpp",fullname="/home/honza/dev/test/stl_test/stl_test.cpp",line="12",thread-groups=["i1"],times="0",original-location="/home/honza/dev/test/stl_test/stl_test.cpp:12"} (gdb) ^done,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x0000000000400906",func="main()",file="stl_test.cpp",fullname="/home/honza/dev/test/stl_test/stl_test.cpp",line="6",thread-groups=["i1"],times="0",original-location="main"} (gdb) =thread-group-started,id="i1",pid="13100" =thread-created,id="1",group-id="i1" ^running *running,thread-id="all" (gdb) =library-loaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="/lib64/ld-linux-x86-64.so.2",symbols-loaded="0",thread-group="i1" =library-loaded,id="linux-vdso.so.1",target-name="linux-vdso.so.1",host-name="linux-vdso.so.1",symbols-loaded="0",thread-group="i1" &"warning: Could not load shared library symbols for linux-vdso.so.1.\nDo you need \"set solib-search-path\" or \"set sysroot\"?" &"\n" =library-loaded,id="/usr/lib/x86_64-linux-gnu/libstdc++.so.6",target-name="/usr/lib/x86_64-linux-gnu/libstdc++.so.6",host-name="/usr/lib/x86_64-linux-gnu/libstdc++.so.6",symbols-loaded="0",thread-group="i1" =library-loaded,id="/lib/x86_64-linux-gnu/libm.so.6",target-name="/lib/x86_64-linux-gnu/libm.so.6",host-name="/lib/x86_64-linux-gnu/libm.so.6",symbols-loaded="0",thread-group="i1" =library-loaded,id="/lib/x86_64-linux-gnu/libgcc_s.so.1",target-name="/lib/x86_64-linux-gnu/libgcc_s.so.1",host-name="/lib/x86_64-linux-gnu/libgcc_s.so.1",symbols-loaded="0",thread-group="i1" =library-loaded,id="/lib/x86_64-linux-gnu/libc.so.6",target-name="/lib/x86_64-linux-gnu/libc.so.6",host-name="/lib/x86_64-linux-gnu/libc.so.6",symbols-loaded="0",thread-group="i1" =breakpoint-modified,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x0000000000400906",func="main()",file="stl_test.cpp",fullname="/home/honza/dev/test/stl_test/stl_test.cpp",line="6",thread-groups=["i1"],times="1",original-location="main"} *stopped,reason="breakpoint-hit",disp="del",bkptno="2",frame={addr="0x0000000000400906",func="main",args=[],file="stl_test.cpp",fullname="/home/honza/dev/test/stl_test/stl_test.cpp",line="6"},thread-id="1",stopped-threads="all",core="0" =breakpoint-deleted,id="2" (gdb) &"\n" ^done (gdb) ^done,name="var1",numchild="0",value="{...}",type="std::list<int, std::allocator<int> >",thread-id="1",dynamic="1",has_more="1" (gdb) ^done,name="var2",numchild="0",value="{...}",type="std::list<int, std::allocator<int> >",thread-id="1",dynamic="1",has_more="1" (gdb) ^done,numchild="1",children=[child={name="var2.<error at 0>",exp="<error at 0>",numchild="35",type="char [35]",thread-id="1"}],has_more="0" (gdb) ^running *running,thread-id="all" (gdb) =breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0000000000400952",func="main()",file="stl_test.cpp",fullname="/home/honza/dev/test/stl_test/stl_test.cpp",line="12",thread-groups=["i1"],times="1",original-location="/home/honza/dev/test/stl_test/stl_test.cpp:12"} *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={addr="0x0000000000400952",func="main",args=[],file="stl_test.cpp",fullname="/home/honza/dev/test/stl_test/stl_test.cpp",line="12"},thread-id="1",stopped-threads="all",core="0" (gdb) &"\n" ^done (gdb) ~"varobj.c:3532: internal-error: c_value_of_variable: Assertion `!value_lazy (var->value)' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit this debugging session? " ~"(y or n) " n ~"varobj.c:3532: internal-error: c_value_of_variable: Assertion `!value_lazy (var->value)' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nCreate a core file of GDB? " ~"(y or n) "
This bug is reproduced on my machine too. I use the Eclipse CDT IDE and this bug may break the debugging because the gdb is crashed sometimes with exactly the same symptoms as described here and the same assertion is logged on the gdb trace console. I tried the different Eclipse CDT, gcc and gdb versions -- the bug is here.
I tried this recently and was also unable to reproduce. At the same time I don't really see why that assertion should even be there. Either the value should automatically un-lazy, or we could just explicitly un-lazy it at that point.
Tried again and I still can't reproduce. Tried gdb git master. I'm going to close this; but if someone has more info and can still reproduce, please reopen.