Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SR-15677] LLDB crashes when viewing frame in SwiftNIO code #4299

Closed
adam-fowler opened this issue Jan 3, 2022 · 12 comments
Closed

[SR-15677] LLDB crashes when viewing frame in SwiftNIO code #4299

adam-fowler opened this issue Jan 3, 2022 · 12 comments
Labels
bug Something isn't working Crash LLDB for Swift

Comments

@adam-fowler
Copy link

Previous ID SR-15677
Radar rdar://problem/87333593
Original Reporter @adam-fowler
Type Bug
Status Closed
Resolution Done
Environment

Ubuntu 20_04.3 LTS

Swift version 5.5 (swift-5.5-RELEASE)
Target: x86_64-unknown-linux-gnu

lldb version 10.0.0 (git@github.com:apple/llvm-project.git revision fbf0080)

Additional Detail from JIRA
Votes 0
Component/s LLDB for Swift
Labels Bug, Crash
Assignee None
Priority Medium

md5: 9069b6ef67050ae4d6d41a2d41ea1055

Issue Description:

When viewing the frame with `fr v` in functions with `NIOAny` as a parameter the swift version of LLDB crashes.

Replication steps:

  • It is possible to replicate this using a swift-nio example

  • Build swift-nio (swift build)

  • Debug NIOHTTP1Server example (lldb .build/debug/NIOHTTP1Server)

  • Add breakpoint (b HTTPHandler.channelRead)

  • run

  • Outside LLDB run curl [::1]:8888

  • Return to lldb, when you hit the breakpoint enter `fr v`

LLDB should then crash.

This issue is making it hard to debug any SwiftNIO code in Visual Studio Code with the CodeLLDB extension on Linux.

@weissi
Copy link
Member

weissi commented Jan 10, 2022

@swift-ci create

@weissi
Copy link
Member

weissi commented Jan 10, 2022

I reproduce this with 5.5

* thread #​3, name = 'NIO-ELT-0-#1', stop reason = breakpoint 1.1
    frame #​0: 0x000055555572afe6 NIOHTTP1Server`HTTPHandler.channelRead(context=0x00007fffe80406c0, data=NIOCore.NIOAny @ 0x00007ffff4ba80e0, self=0x00007ffff003fcb0) at main.swift:403:28
   400      }
   401  
   402      func channelRead(context: ChannelHandlerContext, data: NIOAny) {
-> 403          let reqPart = self.unwrapInboundIn(data)
   404          if let handler = self.handler {
   405              handler(context, reqPart)
   406              return
Target 0: (NIOHTTP1Server) stopped.
(lldb) f v
error: invalid frame index argument 'v'.
(lldb) fr v
lldb: /home/build-user/llvm-project/lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp:3098: auto lldb_private::TypeSystemSwiftTypeRef::DumpTypeValue(lldb::opaque_compiler_type_t, lldb_private::Stream *, lldb::Format, const lldb_private::DataExtractor &, lldb::offset_t, size_t, uint32_t, uint32_t, lldb_private::ExecutionContextScope *, bool)::(anonymous class)::operator()() const: Assertion `false && "Unhandled node kind"' failed.
Aborted

Before it crashes however, it spins at 100% CPU for maybe a minute.

CC @adrian-prantl/friss (JIRA User)/@dcci

@adam-fowler
Copy link
Author

This appears to be fixed in the latest nightly, but is still unresolved in the 5.5 nightly. Is there a chance the fix can be brought across to the 5.5 branch?

@adrian-prantl
Copy link
Member

Unfortunately the amount of changes between 5.5 and 5.6 branch are quite large, so backporting a fix is likely too risky. Can you attach lldb to lldb to capture a backtrace so we can identify what the crash was? (It's probably faster for you to do this than me building 5.5 and getting SwiftNIO to build)

@adam-fowler
Copy link
Author

Shame I was hoping maybe someone might recognise what change fixed this. I'll see if I can find some time to do the lldb attaching to lldb. Not sure I'd be much faster than you though as my experience of lldb is minimal.

@weissi
Copy link
Member

weissi commented Jan 12, 2022

@adam-fowler attaching lldb to lldb should be straightforward:

in LLDB 1 do (copying your steps)

  • It is possible to replicate this using a swift-nio example

  • Build swift-nio (swift build)

  • Debug NIOHTTP1Server example (lldb .build/debug/NIOHTTP1Server)

  • Add breakpoint (b HTTPHandler.channelRead)

then get a new terminal and run another LLDB (LLDB 2)

lldb -p $(pgrep lldb)   # attach lldb to the already running LLDB (1)

(lldb) continue

Now back in LLDB 1 do (copying your steps)

  • run

  • Outside LLDB run curl [::1]:8888

  • Return to lldb, when you hit the breakpoint enter `fr v`

and once you hit the crash, LLDB 2 should've stopped. There you could run maybe

bt
bt all
register read

and attach the info here.

@weissi
Copy link
Member

weissi commented Jan 12, 2022

Actually, I repro too. I can attach that.

@weissi
Copy link
Member

weissi commented Jan 12, 2022

@adrian-prantl there you go

$ docker exec -it pensive_feistel /bin/bash
root@2428f10b5cb4:/Users/johannes/devel/swift-nio# lldb -p $(pgrep lldb)
(lldb) process attach --pid 1530
Process 1530 stopped
* thread #​1, name = 'lldb', stop reason = signal SIGSTOP
    frame #​0: 0x00007fbccf41c12b libc.so.6`__select + 107
libc.so.6`__select:
->  0x7fbccf41c12b <+107>: cmpq   $-0x1000, %rax            ; imm = 0xF000 
    0x7fbccf41c131 <+113>: ja     0x7fbccf41c162            ; <+162>
    0x7fbccf41c133 <+115>: movl   %r9d, %edi
    0x7fbccf41c136 <+118>: movl   %eax, 0xc(%rsp)
  thread #&#8203;2, name = 'dbg.evt-handler', stop reason = signal SIGSTOP
    frame #&#8203;0: 0x00007fbcd9585376 libpthread.so.0`pthread_cond_wait@@GLIBC_2.3.2 + 534
libpthread.so.0`pthread_cond_wait@@GLIBC_2.3.2:
->  0x7fbcd9585376 <+534>: cmpq   $-0x1000, %rax            ; imm = 0xF000 
    0x7fbcd958537c <+540>: ja     0x7fbcd95854a8            ; <+840>
    0x7fbcd9585382 <+546>: movl   %r8d, %edi
    0x7fbcd9585385 <+549>: callq  0x7fbcd9589040            ; __pthread_disable_asynccancel
Target 0: (lldb) stopped.

Executable module set to "/usr/bin/lldb".
Architecture set to: x86_64-unknown-linux-gnu.
(lldb) cont
Process 1530 resuming
Process 1530 stopped
* thread #&#8203;1, name = 'lldb', stop reason = signal SIGABRT
    frame #&#8203;0: 0x00007fbccf34a18b libc.so.6`raise + 203
libc.so.6`raise:
->  0x7fbccf34a18b <+203>: movq   0x108(%rsp), %rax
    0x7fbccf34a193 <+211>: xorq   %fs:0x28, %rax
    0x7fbccf34a19c <+220>: jne    0x7fbccf34a1c4            ; <+260>
    0x7fbccf34a19e <+222>: movl   %r8d, %eax
Target 0: (lldb) stopped.
(lldb) bt
* thread #&#8203;1, name = 'lldb', stop reason = signal SIGABRT
  * frame #&#8203;0: 0x00007fbccf34a18b libc.so.6`raise + 203
    frame #&#8203;1: 0x00007fbccf329859 libc.so.6`abort + 299
    frame #&#8203;2: 0x00007fbccf329729 libc.so.6`___lldb_unnamed_symbol8$$libc.so.6 + 15
    frame #&#8203;3: 0x00007fbccf33af36 libc.so.6`__assert_fail + 70
    frame #&#8203;4: 0x00007fbcd0d4cf61 liblldb.so.10git`lldb_private::TypeSystemSwiftTypeRef::DumpTypeValue(void*, lldb_private::Stream*, lldb::Format, lldb_private::DataExtractor const&, unsigned long, unsigned long, unsigned int, unsigned int, lldb_private::ExecutionContextScope*, bool) + 2849
    frame #&#8203;5: 0x00007fbcd08a2c7a liblldb.so.10git`lldb_private::CompilerType::DumpTypeValue(lldb_private::Stream*, lldb::Format, lldb_private::DataExtractor const&, unsigned long, unsigned long, unsigned int, unsigned int, lldb_private::ExecutionContextScope*, bool) + 74
    frame #&#8203;6: 0x00007fbcd081d6b3 liblldb.so.10git`lldb_private::TypeFormatImpl_Format::FormatObject(lldb_private::ValueObject*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) const + 1459
    frame #&#8203;7: 0x00007fbcd07ebc51 liblldb.so.10git`lldb_private::ValueObject::GetValueAsCString() + 465
    frame #&#8203;8: 0x00007fbcd0b15933 liblldb.so.10git`std::_Function_handler<std::shared_ptr<lldb_private::SyntheticChildren> (lldb_private::ValueObject&, lldb::DynamicValueType, lldb_private::FormatManager&), lldb_private::SwiftLanguage::GetHardcodedSynthetics()::$_2::operator()() const::'lambda'(lldb_private::ValueObject&, lldb::DynamicValueType, lldb_private::FormatManager&)>::_M_invoke(std::_Any_data const&, lldb_private::ValueObject&, lldb::DynamicValueType&&, lldb_private::FormatManager&) + 83
    frame #&#8203;9: 0x00007fbcd08107ac liblldb.so.10git`bool lldb_private::LanguageCategory::GetHardcoded<std::shared_ptr<lldb_private::SyntheticChildren> >(lldb_private::FormatManager&, lldb_private::FormattersMatchData&, std::shared_ptr<lldb_private::SyntheticChildren>&) + 140
    frame #&#8203;10: 0x00007fbcd080e4e9 liblldb.so.10git`std::shared_ptr<lldb_private::SyntheticChildren> lldb_private::FormatManager::GetHardcoded<std::shared_ptr<lldb_private::SyntheticChildren> >(lldb_private::FormattersMatchData&) + 121
    frame #&#8203;11: 0x00007fbcd080b9d9 liblldb.so.10git`std::shared_ptr<lldb_private::SyntheticChildren> lldb_private::FormatManager::Get<std::shared_ptr<lldb_private::SyntheticChildren> >(lldb_private::ValueObject&, lldb::DynamicValueType) + 793
    frame #&#8203;12: 0x00007fbcd080b6b9 liblldb.so.10git`lldb_private::FormatManager::GetSyntheticChildren(lldb_private::ValueObject&, lldb::DynamicValueType) + 9
    frame #&#8203;13: 0x00007fbcd0805a3f liblldb.so.10git`lldb_private::DataVisualization::GetSyntheticChildren(lldb_private::ValueObject&, lldb::DynamicValueType) + 47
    frame #&#8203;14: 0x00007fbcd07e7e66 liblldb.so.10git`lldb_private::ValueObject::UpdateFormatsIfNeeded() + 838
    frame #&#8203;15: 0x00007fbcd07e75c1 liblldb.so.10git`lldb_private::ValueObject::UpdateValueIfNeeded(bool) + 113
    frame #&#8203;16: 0x00007fbcd0821725 liblldb.so.10git`lldb_private::ValueObjectPrinter::GetMostSpecializedValue() + 37
    frame #&#8203;17: 0x00007fbcd082161c liblldb.so.10git`lldb_private::ValueObjectPrinter::PrintValueObject() + 12
    frame #&#8203;18: 0x00007fbcd07f1523 liblldb.so.10git`lldb_private::ValueObject::Dump(lldb_private::Stream&, lldb_private::DumpValueObjectOptions const&) + 83
    frame #&#8203;19: 0x00007fbcd0ea8df8 liblldb.so.10git`CommandObjectFrameVariable::DoExecute(lldb_private::Args&, lldb_private::CommandReturnObject&) + 5944
    frame #&#8203;20: 0x00007fbcd0875b57 liblldb.so.10git`lldb_private::CommandObjectParsed::Execute(char const*, lldb_private::CommandReturnObject&) + 391
    frame #&#8203;21: 0x00007fbcd086b810 liblldb.so.10git`lldb_private::CommandInterpreter::HandleCommand(char const*, lldb_private::LazyBool, lldb_private::CommandReturnObject&, lldb_private::ExecutionContext*, bool, bool) + 3200
    frame #&#8203;22: 0x00007fbcd086f49c liblldb.so.10git`lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) + 508
    frame #&#8203;23: 0x00007fbcd07b4dc6 liblldb.so.10git`lldb_private::IOHandlerEditline::Run() + 358
    frame #&#8203;24: 0x00007fbcd07981a4 liblldb.so.10git`lldb_private::Debugger::RunIOHandlers() + 100
    frame #&#8203;25: 0x00007fbcd0870ced liblldb.so.10git`lldb_private::CommandInterpreter::RunCommandInterpreter(lldb_private::CommandInterpreterRunOptions&) + 221
    frame #&#8203;26: 0x00007fbcd0458747 liblldb.so.10git`lldb::SBDebugger::RunCommandInterpreter(bool, bool) + 247
    frame #&#8203;27: 0x000000000040a94f lldb`Driver::MainLoop() + 3439
    frame #&#8203;28: 0x000000000040ccea lldb`main + 3018
    frame #&#8203;29: 0x00007fbccf32b0b3 libc.so.6`__libc_start_main + 243
    frame #&#8203;30: 0x000000000040716e lldb`_start + 46
(lldb) bt all
* thread #&#8203;1, name = 'lldb', stop reason = signal SIGABRT
  * frame #&#8203;0: 0x00007fbccf34a18b libc.so.6`raise + 203
    frame #&#8203;1: 0x00007fbccf329859 libc.so.6`abort + 299
    frame #&#8203;2: 0x00007fbccf329729 libc.so.6`___lldb_unnamed_symbol8$$libc.so.6 + 15
    frame #&#8203;3: 0x00007fbccf33af36 libc.so.6`__assert_fail + 70
    frame #&#8203;4: 0x00007fbcd0d4cf61 liblldb.so.10git`lldb_private::TypeSystemSwiftTypeRef::DumpTypeValue(void*, lldb_private::Stream*, lldb::Format, lldb_private::DataExtractor const&, unsigned long, unsigned long, unsigned int, unsigned int, lldb_private::ExecutionContextScope*, bool) + 2849
    frame #&#8203;5: 0x00007fbcd08a2c7a liblldb.so.10git`lldb_private::CompilerType::DumpTypeValue(lldb_private::Stream*, lldb::Format, lldb_private::DataExtractor const&, unsigned long, unsigned long, unsigned int, unsigned int, lldb_private::ExecutionContextScope*, bool) + 74
    frame #&#8203;6: 0x00007fbcd081d6b3 liblldb.so.10git`lldb_private::TypeFormatImpl_Format::FormatObject(lldb_private::ValueObject*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) const + 1459
    frame #&#8203;7: 0x00007fbcd07ebc51 liblldb.so.10git`lldb_private::ValueObject::GetValueAsCString() + 465
    frame #&#8203;8: 0x00007fbcd0b15933 liblldb.so.10git`std::_Function_handler<std::shared_ptr<lldb_private::SyntheticChildren> (lldb_private::ValueObject&, lldb::DynamicValueType, lldb_private::FormatManager&), lldb_private::SwiftLanguage::GetHardcodedSynthetics()::$_2::operator()() const::'lambda'(lldb_private::ValueObject&, lldb::DynamicValueType, lldb_private::FormatManager&)>::_M_invoke(std::_Any_data const&, lldb_private::ValueObject&, lldb::DynamicValueType&&, lldb_private::FormatManager&) + 83
    frame #&#8203;9: 0x00007fbcd08107ac liblldb.so.10git`bool lldb_private::LanguageCategory::GetHardcoded<std::shared_ptr<lldb_private::SyntheticChildren> >(lldb_private::FormatManager&, lldb_private::FormattersMatchData&, std::shared_ptr<lldb_private::SyntheticChildren>&) + 140
    frame #&#8203;10: 0x00007fbcd080e4e9 liblldb.so.10git`std::shared_ptr<lldb_private::SyntheticChildren> lldb_private::FormatManager::GetHardcoded<std::shared_ptr<lldb_private::SyntheticChildren> >(lldb_private::FormattersMatchData&) + 121
    frame #&#8203;11: 0x00007fbcd080b9d9 liblldb.so.10git`std::shared_ptr<lldb_private::SyntheticChildren> lldb_private::FormatManager::Get<std::shared_ptr<lldb_private::SyntheticChildren> >(lldb_private::ValueObject&, lldb::DynamicValueType) + 793
    frame #&#8203;12: 0x00007fbcd080b6b9 liblldb.so.10git`lldb_private::FormatManager::GetSyntheticChildren(lldb_private::ValueObject&, lldb::DynamicValueType) + 9
    frame #&#8203;13: 0x00007fbcd0805a3f liblldb.so.10git`lldb_private::DataVisualization::GetSyntheticChildren(lldb_private::ValueObject&, lldb::DynamicValueType) + 47
    frame #&#8203;14: 0x00007fbcd07e7e66 liblldb.so.10git`lldb_private::ValueObject::UpdateFormatsIfNeeded() + 838
    frame #&#8203;15: 0x00007fbcd07e75c1 liblldb.so.10git`lldb_private::ValueObject::UpdateValueIfNeeded(bool) + 113
    frame #&#8203;16: 0x00007fbcd0821725 liblldb.so.10git`lldb_private::ValueObjectPrinter::GetMostSpecializedValue() + 37
    frame #&#8203;17: 0x00007fbcd082161c liblldb.so.10git`lldb_private::ValueObjectPrinter::PrintValueObject() + 12
    frame #&#8203;18: 0x00007fbcd07f1523 liblldb.so.10git`lldb_private::ValueObject::Dump(lldb_private::Stream&, lldb_private::DumpValueObjectOptions const&) + 83
    frame #&#8203;19: 0x00007fbcd0ea8df8 liblldb.so.10git`CommandObjectFrameVariable::DoExecute(lldb_private::Args&, lldb_private::CommandReturnObject&) + 5944
    frame #&#8203;20: 0x00007fbcd0875b57 liblldb.so.10git`lldb_private::CommandObjectParsed::Execute(char const*, lldb_private::CommandReturnObject&) + 391
    frame #&#8203;21: 0x00007fbcd086b810 liblldb.so.10git`lldb_private::CommandInterpreter::HandleCommand(char const*, lldb_private::LazyBool, lldb_private::CommandReturnObject&, lldb_private::ExecutionContext*, bool, bool) + 3200
    frame #&#8203;22: 0x00007fbcd086f49c liblldb.so.10git`lldb_private::CommandInterpreter::IOHandlerInputComplete(lldb_private::IOHandler&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) + 508
    frame #&#8203;23: 0x00007fbcd07b4dc6 liblldb.so.10git`lldb_private::IOHandlerEditline::Run() + 358
    frame #&#8203;24: 0x00007fbcd07981a4 liblldb.so.10git`lldb_private::Debugger::RunIOHandlers() + 100
    frame #&#8203;25: 0x00007fbcd0870ced liblldb.so.10git`lldb_private::CommandInterpreter::RunCommandInterpreter(lldb_private::CommandInterpreterRunOptions&) + 221
    frame #&#8203;26: 0x00007fbcd0458747 liblldb.so.10git`lldb::SBDebugger::RunCommandInterpreter(bool, bool) + 247
    frame #&#8203;27: 0x000000000040a94f lldb`Driver::MainLoop() + 3439
    frame #&#8203;28: 0x000000000040ccea lldb`main + 3018
    frame #&#8203;29: 0x00007fbccf32b0b3 libc.so.6`__libc_start_main + 243
    frame #&#8203;30: 0x000000000040716e lldb`_start + 46
  thread #&#8203;2, name = 'dbg.evt-handler'
    frame #&#8203;0: 0x00007fbcd9585376 libpthread.so.0`pthread_cond_wait@@GLIBC_2.3.2 + 534
    frame #&#8203;1: 0x00007fbccf5e1e30 libstdc++.so.6`std::condition_variable::wait(std::unique_lock<std::mutex>&) + 16
    frame #&#8203;2: 0x00007fbcd09c058d liblldb.so.10git`lldb_private::Listener::GetEventInternal(lldb_private::Timeout<std::ratio<1l, 1000000l> > const&, lldb_private::Broadcaster*, lldb_private::ConstString const*, unsigned int, unsigned int, std::shared_ptr<lldb_private::Event>&) + 333
    frame #&#8203;3: 0x00007fbcd09c0747 liblldb.so.10git`lldb_private::Listener::GetEvent(std::shared_ptr<lldb_private::Event>&, lldb_private::Timeout<std::ratio<1l, 1000000l> > const&) + 23
    frame #&#8203;4: 0x00007fbcd079b80a liblldb.so.10git`lldb_private::Debugger::DefaultEventHandler() + 330
    frame #&#8203;5: 0x00007fbcd079bc46 liblldb.so.10git`lldb_private::Debugger::EventHandlerThread(void*) + 6
    frame #&#8203;6: 0x00007fbcd0854019 liblldb.so.10git`lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) + 105
    frame #&#8203;7: 0x00007fbcd957e609 libpthread.so.0`start_thread + 217
    frame #&#8203;8: 0x00007fbccf426293 libc.so.6`__clone + 67
  thread #&#8203;3, name = 'ait4(pid=1832)>'
    frame #&#8203;0: 0x00007fbccf3e9dff libc.so.6`wait4 + 95
    frame #&#8203;1: 0x00007fbcd083a5ea liblldb.so.10git`MonitorChildProcessThreadFunction(void*) + 1082
    frame #&#8203;2: 0x00007fbcd0854019 liblldb.so.10git`lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) + 105
    frame #&#8203;3: 0x00007fbcd957e609 libpthread.so.0`start_thread + 217
    frame #&#8203;4: 0x00007fbccf426293 libc.so.6`__clone + 67
  thread #&#8203;4, name = 'b-remote.async>'
    frame #&#8203;0: 0x00007fbcd9585376 libpthread.so.0`pthread_cond_wait@@GLIBC_2.3.2 + 534
    frame #&#8203;1: 0x00007fbccf5e1e30 libstdc++.so.6`std::condition_variable::wait(std::unique_lock<std::mutex>&) + 16
    frame #&#8203;2: 0x00007fbcd09c058d liblldb.so.10git`lldb_private::Listener::GetEventInternal(lldb_private::Timeout<std::ratio<1l, 1000000l> > const&, lldb_private::Broadcaster*, lldb_private::ConstString const*, unsigned int, unsigned int, std::shared_ptr<lldb_private::Event>&) + 333
    frame #&#8203;3: 0x00007fbcd09c0747 liblldb.so.10git`lldb_private::Listener::GetEvent(std::shared_ptr<lldb_private::Event>&, lldb_private::Timeout<std::ratio<1l, 1000000l> > const&) + 23
    frame #&#8203;4: 0x00007fbcd0c432b6 liblldb.so.10git`lldb_private::process_gdb_remote::ProcessGDBRemote::AsyncThread(void*) + 326
    frame #&#8203;5: 0x00007fbcd0854019 liblldb.so.10git`lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) + 105
    frame #&#8203;6: 0x00007fbcd957e609 libpthread.so.0`start_thread + 217
    frame #&#8203;7: 0x00007fbccf426293 libc.so.6`__clone + 67
  thread #&#8203;5, name = 'intern-state'
    frame #&#8203;0: 0x00007fbcd9585376 libpthread.so.0`pthread_cond_wait@@GLIBC_2.3.2 + 534
    frame #&#8203;1: 0x00007fbccf5e1e30 libstdc++.so.6`std::condition_variable::wait(std::unique_lock<std::mutex>&) + 16
    frame #&#8203;2: 0x00007fbcd09c058d liblldb.so.10git`lldb_private::Listener::GetEventInternal(lldb_private::Timeout<std::ratio<1l, 1000000l> > const&, lldb_private::Broadcaster*, lldb_private::ConstString const*, unsigned int, unsigned int, std::shared_ptr<lldb_private::Event>&) + 333
    frame #&#8203;3: 0x00007fbcd09c0747 liblldb.so.10git`lldb_private::Listener::GetEvent(std::shared_ptr<lldb_private::Event>&, lldb_private::Timeout<std::ratio<1l, 1000000l> > const&) + 23
    frame #&#8203;4: 0x00007fbcd090e3d5 liblldb.so.10git`lldb_private::Process::RunPrivateStateThread(bool) + 405
    frame #&#8203;5: 0x00007fbcd090dc60 liblldb.so.10git`lldb_private::Process::PrivateStateThread(void*) + 16
    frame #&#8203;6: 0x00007fbcd0854019 liblldb.so.10git`lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) + 105
    frame #&#8203;7: 0x00007fbcd957e609 libpthread.so.0`start_thread + 217
    frame #&#8203;8: 0x00007fbccf426293 libc.so.6`__clone + 67
  thread #&#8203;6, name = '.process.stdio>'
    frame #&#8203;0: 0x00007fbccf41c12b libc.so.6`__select + 107
    frame #&#8203;1: 0x00007fbcd09d7dc1 liblldb.so.10git`SelectHelper::Select() + 1505
    frame #&#8203;2: 0x00007fbcd084e11c liblldb.so.10git`lldb_private::ConnectionFileDescriptor::BytesAvailable(lldb_private::Timeout<std::ratio<1l, 1000000l> > const&, lldb_private::Status*) + 412
    frame #&#8203;3: 0x00007fbcd084db88 liblldb.so.10git`lldb_private::ConnectionFileDescriptor::Read(void*, unsigned long, lldb_private::Timeout<std::ratio<1l, 1000000l> > const&, lldb::ConnectionStatus&, lldb_private::Status*) + 168
    frame #&#8203;4: 0x00007fbcd0791eb5 liblldb.so.10git`lldb_private::Communication::ReadThread(void*) + 213
    frame #&#8203;5: 0x00007fbcd0854019 liblldb.so.10git`lldb_private::HostNativeThreadBase::ThreadCreateTrampoline(void*) + 105
    frame #&#8203;6: 0x00007fbcd957e609 libpthread.so.0`start_thread + 217
    frame #&#8203;7: 0x00007fbccf426293 libc.so.6`__clone + 67
(lldb) register read
General Purpose Registers:
       rax = 0x0000000000000000
       rbx = 0x00007fbccce2dec0
       rcx = 0x00007fbccf34a18b  libc.so.6`raise + 203
       rdx = 0x0000000000000000
       rdi = 0x0000000000000002
       rsi = 0x00007fff741e7d20
       rbp = 0x00007fbccf4bf588  
       rsp = 0x00007fff741e7d20
        r8 = 0x0000000000000000
        r9 = 0x00007fff741e7d20
       r10 = 0x0000000000000008
       r11 = 0x0000000000000246
       r12 = 0x00007fbcd5f2a231  
       r13 = 0x0000000000000c1a
       r14 = 0x00007fbcd5f2d008  
       r15 = 0x0000000001ffce70
       rip = 0x00007fbccf34a18b  libc.so.6`raise + 203
    rflags = 0x0000000000000246
        cs = 0x0000000000000033
        fs = 0x0000000000000000
        gs = 0x0000000000000000
        ss = 0x000000000000002b
        ds = 0x0000000000000000
        es = 0x0000000000000000

(lldb) frame select 4
frame #&#8203;4: 0x00007fbcd0d4cf61 liblldb.so.10git`lldb_private::TypeSystemSwiftTypeRef::DumpTypeValue(void*, lldb_private::Stream*, lldb::Format, lldb_private::DataExtractor const&, unsigned long, unsigned long, unsigned int, unsigned int, lldb_private::ExecutionContextScope*, bool) + 2849
liblldb.so.10git`lldb_private::TypeSystemSwiftTypeRef::DumpTypeValue:
->  0x7fbcd0d4cf61 <+2849>: leaq   0x51dd692(%rip), %rdi
    0x7fbcd0d4cf68 <+2856>: leaq   0x51dd2c2(%rip), %rsi
    0x7fbcd0d4cf6f <+2863>: leaq   0x51dd6d0(%rip), %rcx
    0x7fbcd0d4cf76 <+2870>: movl   $0x4d0, %edx              ; imm = 0x4D0 
(lldb) fr v
(lldb) register read
General Purpose Registers:
       rbx = 0x0000000085195fb8
       rbp = 0x00007fff741e84e0
       rsp = 0x00007fff741e7ff0
       r12 = 0x0000000000000000
       r13 = 0x0000000000000000
       r14 = 0x00007fbcc1b54a50
       r15 = 0x0000000001ffce70
       rip = 0x00007fbcd0d4cf61  liblldb.so.10git`lldb_private::TypeSystemSwiftTypeRef::DumpTypeValue(void*, lldb_private::Stream*, lldb::Format, lldb_private::DataExtractor const&, unsigned long, unsigned long, unsigned int, unsigned int, lldb_private::ExecutionContextScope*, bool) + 2849
16 registers were unavailable.

(lldb) 

@adam-fowler
Copy link
Author

Thanks @weissi

@adrian-prantl
Copy link
Member

Thanks Johannes! Since this is just the `assert(false && "Unhandled node kind");` I can create a patch to remove this assertion. There's no risk in taking that.

@adrian-prantl
Copy link
Member

#3785

@adam-fowler
Copy link
Author

Verified as working in 5.5.3

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
@shahmishal shahmishal transferred this issue from apple/swift May 5, 2022
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Crash LLDB for Swift
Projects
None yet
Development

No branches or pull requests

3 participants