Bug 14734 - Response for "-var-update --all-values *" contains incorrect changelist in case the evaluation causes SIGSEGV
Summary: Response for "-var-update --all-values *" contains incorrect changelist in ca...
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: varobj (show other bugs)
Version: 7.5
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-10-17 14:25 UTC by nikolay.koldunov
Modified: 2023-08-31 19:57 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description nikolay.koldunov 2012-10-17 14:25:53 UTC
Steps to reproduce:
 - create and compile a C++ sample
 - execute GDB with "--interpreter mi" parameter
 - start debugging session
 - create a variable object which causes segmentation fault
 - make GDB update all variable objects (-var-update --all-values *)

Actual result:
 - GDB generates incorrect response containing information about the segmentation fault error (for example, '23^done,changelist=[reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation fault",frame={addr="0x00007ffff74982e1",func="__strlen_sse2_pminub",args=[],file="../sysdeps/x86_64/multiarch/strlen-sse2-pminub.S",line="39"},reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation fault",frame={addr="0x00007ffff74982e1",func="__strlen_sse2_pminub",args=[],file="../sysdeps/x86_64/multiarch/strlen-sse2-pminub.S",line="39"}]')

Expected result:
 - GDB shows valid changelist and generates a segmentation fault error
Comment 1 nikolay.koldunov 2014-01-16 08:55:12 UTC
There is another example of confusing output:
*stopped,changelist=[{name="var151",value="0",in_scope="true",type_changed="false",has_more="0"},reason="signal-received",signal-name="SIGTRAP",signal-meaning="Trace/breakpoint trap",frame={addr="0x774e40f1",func="ntdll!DbgUserBreakPoint",args=[],from="/cygdrive/c/Windows/system32/ntdll.dll"},thread-id="3",stopped-threads="all"

May be this issue is not connected to variable objects.
Comment 2 nikolay.koldunov 2014-01-16 11:35:25 UTC
*stopped,changelist=[reason="signal-received",signal-name="SIGINT",signal-meaning="Interrupt",frame={addr="0x00007ffff6cfb05e",func="pthread_cond_timedwait@@GLIBC_2.3.2",args=[],file="../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S",fullname="/build/buildd/eglibc-2.17/nptl/../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S",line="238"},thread-id="11",stopped-threads="all",core="6"
Comment 3 Anton Makeev 2016-05-13 19:58:37 UTC
More examples:

1)
-var-create - 0x78f9d8 "s.length()" 
~"\nProgram received signal " 
~"SIGSEGV, Segmentation fault.\n" 
^done,reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation fault",frame={addr="0x6fe6f990",func="libstdc++-6!_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv",args=[],from="C:\\mingw-w64\\i686-5.3.0-posix-dwarf-rt_v4-rev0\\mingw32\\bin\\libstdc++-6.dll"},name="var2",numchild="0",value="",type="std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::size_type",thread-id="1",has_more="0" 

2)
-var-update --simple-values * 
~"\nProgram received signal " 
~"SIGSEGV, Segmentation fault.\n" 
^done,changelist=[reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation fault",frame={addr="0x6fe6f990",func="libstdc++-6!_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv",args=[],from="C:\\mingw-w64\\i686-5.3.0-posix-dwarf-rt_v4-rev0\\mingw32\\bin\\libstdc++-6.dll"}]

3) -var-create result split over *stopped and ^done responses
-var-create - 0x73fa58 "s.length()" 
~"\nThread " 
~"1 received signal SIGSEGV, Segmentation fault.\n" 
~"0x6fc66740 in ?? () from C:\\MinGW\\bin\\libstdc++-6.dll\n" 
*stopped,reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation fault",frame={addr="0x6fc66740",func="??",args=[],from="C:\\MinGW\\bin\\libstdc++-6.dll"},thread-id="1",stopped-threads="all" 
^done,name="var2",numchild="0",value="",type="std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size_type",thread-id="1",has_more="0" 


reference reports:
https://youtrack.jetbrains.com/issue/CPP-5623
https://youtrack.jetbrains.com/issue/CPP-6732
Comment 4 Tom Tromey 2023-08-31 19:57:10 UTC
(In reply to nikolay.koldunov from comment #0)

>  - create a variable object which causes segmentation fault

I guess this can be done but it seems pretty bad.