puremourning / vimspector

vimspector - A multi-language debugging system for Vim
http://puremourning.github.io/vimspector-web
Apache License 2.0
4.12k stars 175 forks source link

[Feature Request] Implement some sort of variable paging, or at least limit variable lists #889

Open kentkr opened 1 month ago

kentkr commented 1 month ago

Description

When accessing a declared, but uninstantiated, map in the Variables view there is a memory leak. Python, neovim, and codelldb begin to use 2+gb of RAM each. Vimspector becomes unresponsive and neovim must be force quit.

Is it reproducible in vim?

Only broken in Neovim

Works with clean config?

Yes

Sample project works?

Reproducible with sample project

Minimal Reproduction

List of steps to reproduce:

  1. Copy and paste the below files into a project eg.cpp
#include <map>

int main() {
    auto m = std::map<char, int>();
    m['a'] = 0;
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.26)

project("eg")

# Set the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# debug and coc-clangd config
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

add_executable(eg eg.cpp)

# Install targets
install(TARGETS eg DESTINATION bin)

.vimspector.json

{
  "configurations": {
    "Launch": {
      "adapter": "CodeLLDB",
      "configuration": {
        "request": "launch",
        "program": "eg",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${workspaceRoot}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "lldb",
        "setupCommands": []
      }
    }
  }
}
  1. Build the project with cmake . then cmake --build .
  2. In neovim open up eg.cpp
  3. Create a breakpoint at line 4 :call vimspector#SetLineBreakpoint('eg.cpp', 4)
  4. Launch debugging :call vimspector#Launch()
  5. Immediately move to the buffer vimspector.Variables
  6. Under Scope: local try to to open up the m variable by hovering over it and hitting enter/return
  7. Wait or keep hitting enter. It takes a second for the error to appear.

Expected Behaviour

Accessing the variable before it is instantiated should not cause a memory leak.

Or at least if it does the debugger should be able to reset. It currently goes unresponsive.

Actual Behaviour

The debugger (vimspector commands) are no longer responsive, throwing a python eval error. Neovim stays active (unless in tmux which hangs forever).

The processes for neovim, python, and codelldb begin to use excessive amounts of memory. The only way out of this is to force quite the neovim process that originally launched the vimspector session.

If that process is not stopped then any new session that's created will experience the same issue.

Additional information

I'm a c++ novice so wouldn't be surprised if I'm making a mistake somewhere.

I'm happy to contribute if needed!

Installation Type

Other (specify in notes)

Vimspector version

vim-plug. Sorry I'm not sure what you need from git rev-parse HEAD

Debug Info

All commands, including `VimspectorDebugInfo` become unresponsive. Here's the output right before that moment.

[]
--------------------------------------------------------------------------------
Ex Breakpoints: 
--------------------------------------------------------------------------------
{
  "filters": [
    "cpp_throw"
  ]
}
--------------------------------------------------------------------------------

### Log file

```Text
2024-10-18 09:18:28,890 - INFO - debug_session.py:128 - 0 - **** INITIALISING NEW VIMSPECTOR SESSION FOR ID 0 ****
2024-10-18 09:18:28,890 - INFO - debug_session.py:130 - 0 - API is: neo
2024-10-18 09:18:28,890 - INFO - debug_session.py:131 - 0 - VIMSPECTOR_HOME = /Users/kylekent/.local/share/nvim/plugged/vimspector/python3/vimspector/../..
2024-10-18 09:18:28,890 - INFO - debug_session.py:132 - 0 - gadgetDir = /Users/kylekent/.local/share/nvim/plugged/vimspector/gadgets/macos
2024-10-18 09:18:30,657 - INFO - debug_session.py:226 - 0 - User requested start debug session with {}
2024-10-18 09:18:30,659 - DEBUG - debug_session.py:187 - 0 - Reading configurations from: None
2024-10-18 09:18:30,659 - DEBUG - debug_session.py:187 - 0 - Reading configurations from: /Users/kylekent/Desktop/tmp/vimspector_bug1/.vimspector.json
2024-10-18 09:18:30,662 - DEBUG - debug_session.py:250 - 0 - Reading gadget config: /Users/kylekent/.local/share/nvim/plugged/vimspector/gadgets/macos/.gadgets.json
2024-10-18 09:18:30,665 - DEBUG - debug_session.py:250 - 0 - Reading gadget config: None
2024-10-18 09:18:30,666 - DEBUG - utils.py:633 - None - Returning workspaceRoot from the map for workspaceRoot with args ()
2024-10-18 09:18:30,666 - DEBUG - utils.py:633 - None - Returning gadgetDir from the map for gadgetDir with args ()
2024-10-18 09:18:30,666 - DEBUG - utils.py:684 - None - Put unusedLocalPort into mapping for unusedLocalPort with args ()
2024-10-18 09:18:30,666 - DEBUG - utils.py:633 - None - Returning unusedLocalPort from the map for unusedLocalPort with args ()
2024-10-18 09:18:30,666 - DEBUG - utils.py:633 - None - Returning workspaceRoot from the map for workspaceRoot with args ()
2024-10-18 09:18:30,666 - DEBUG - utils.py:633 - None - Returning unusedLocalPort from the map for unusedLocalPort with args ()
2024-10-18 09:18:30,666 - INFO - debug_session.py:485 - 0 - Configuration: {"adapter": "CodeLLDB", "configuration": {"request": "launch", "program": "eg", "args": [], "stopAtEntry": true, "cwd": "/Users/kylekent/Desktop/tmp/vimspector_bug1", "environment": [], "externalConsole": false, "MIMode": "lldb", "setupCommands": []}}
2024-10-18 09:18:30,666 - INFO - debug_session.py:487 - 0 - Adapter: {"command": ["/Users/kylekent/.local/share/nvim/plugged/vimspector/gadgets/macos/CodeLLDB/adapter/codelldb", "--port", "59915"], "configuration": {"args": [], "cargo": {}, "cwd": "/Users/kylekent/Desktop/tmp/vimspector_bug1", "env": {}, "name": "lldb", "terminal": "integrated", "type": "lldb"}, "name": "CodeLLDB", "port": "59915", "type": "CodeLLDB"}
2024-10-18 09:18:30,670 - DEBUG - debug_session.py:1200 - 0 - min_width/height: 149/50, actual: 214/65 - result: horizontal
2024-10-18 09:18:30,701 - DEBUG - debug_session.py:1786 - 0 - LAUNCH!
2024-10-18 09:18:30,703 - INFO - debug_session.py:1399 - 0 - Starting debug adapter with: {"command": ["/Users/kylekent/.local/share/nvim/plugged/vimspector/gadgets/macos/CodeLLDB/adapter/codelldb", "--port", "59915"], "configuration": {"args": [], "cargo": {}, "cwd": "/Users/kylekent/Desktop/tmp/vimspector_bug1", "env": {}, "name": "lldb", "terminal": "integrated", "type": "lldb"}, "name": "CodeLLDB", "port": "59915", "type": "CodeLLDB"}
2024-10-18 09:18:30,703 - DEBUG - debug_session.py:1418 - 0 - Connection Type: neochannel
2024-10-18 09:18:31,713 - INFO - debug_session.py:1502 - 0 - Debug Adapter Started
2024-10-18 09:18:31,715 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "initialize", "arguments": {"adapterID": "CodeLLDB", "clientID": "vimspector", "clientName": "vimspector", "linesStartAt1": true, "columnsStartAt1": true, "locale": "en_GB", "pathFormat": "path", "supportsVariableType": true, "supportsVariablePaging": false, "supportsRunInTerminalRequest": true, "supportsMemoryReferences": true, "supportsStartDebuggingRequest": true}, "seq": 0, "type": "request"}
2024-10-18 09:18:31,826 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 1, 'type': 'response', 'request_seq': 0, 'success': True, 'command': 'initialize', 'body': {'exceptionBreakpointFilters': [{'default': True, 'filter': 'cpp_throw', 'label': 'C++: on throw', 'supportsCondition': True}, {'default': False, 'filter': 'cpp_catch', 'label': 'C++: on catch', 'supportsCondition': True}], 'supportTerminateDebuggee': True, 'supportsCancelRequest': True, 'supportsCompletionsRequest': True, 'supportsConditionalBreakpoints': True, 'supportsConfigurationDoneRequest': True, 'supportsDataBreakpoints': True, 'supportsDelayedStackTraceLoading': True, 'supportsDisassembleRequest': True, 'supportsEvaluateForHovers': True, 'supportsExceptionFilterOptions': True, 'supportsExceptionInfoRequest': True, 'supportsFunctionBreakpoints': True, 'supportsGotoTargetsRequest': True, 'supportsHitConditionalBreakpoints': True, 'supportsInstructionBreakpoints': True, 'supportsLogPoints': True, 'supportsReadMemoryRequest': True, 'supportsSetVariable': True, 'supportsSteppingGranularity': True, 'supportsWriteMemoryRequest': True}}
2024-10-18 09:18:31,827 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "launch", "arguments": {"args": [], "cargo": {}, "cwd": "/Users/kylekent/Desktop/tmp/vimspector_bug1", "env": {}, "name": "lldb", "terminal": "integrated", "type": "lldb", "request": "launch", "program": "eg", "stopAtEntry": true, "environment": [], "externalConsole": false, "MIMode": "lldb", "setupCommands": []}, "seq": 1, "type": "request"}
2024-10-18 09:18:31,828 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 2, 'type': 'event', 'event': 'output', 'body': {'category': 'console', 'output': "Console is in 'commands' mode, prefix expressions with '?'.\n"}}
2024-10-18 09:18:31,927 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 3, 'type': 'event', 'event': 'initialized'}
2024-10-18 09:18:33,499 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "setBreakpoints", "arguments": {"source": {"name": "eg.cpp", "path": "/Users/kylekent/Desktop/tmp/vimspector_bug1/eg.cpp"}, "breakpoints": [{"line": 4}], "sourceModified": false}, "seq": 2, "type": "request"}
2024-10-18 09:18:33,500 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "setFunctionBreakpoints", "arguments": {"breakpoints": []}, "seq": 3, "type": "request"}
2024-10-18 09:18:33,501 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "setExceptionBreakpoints", "arguments": {"filters": ["cpp_throw"]}, "seq": 4, "type": "request"}
2024-10-18 09:18:33,501 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 4, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': 'FFFFFFFFFFFFFFFF', 'id': 'FFFFFFFFFFFFFFFF', 'name': 'eg', 'path': '/Users/kylekent/Desktop/tmp/vimspector_bug1/eg', 'symbolFilePath': '/Users/kylekent/Desktop/tmp/vimspector_bug1/eg', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,501 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 5, 'type': 'request', 'command': 'runInTerminal', 'arguments': {'args': ['/Users/kylekent/.local/share/nvim/plugged/vimspector/gadgets/macos/CodeLLDB/adapter/codelldb', 'terminal-agent', '--connect=59918'], 'cwd': '', 'kind': 'integrated', 'title': 'lldb'}}
2024-10-18 09:18:33,501 - DEBUG - debug_session.py:1965 - 0 - Defaulting working directory to /Users/kylekent/Desktop/tmp/vimspector_bug1
2024-10-18 09:18:33,515 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"seq": 5, "type": "response", "request_seq": 5, "command": "runInTerminal", "body": {"processId": 14282}, "success": true}
2024-10-18 09:18:33,521 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 6, 'type': 'response', 'request_seq': 2, 'success': True, 'command': 'setBreakpoints', 'body': {'breakpoints': [{'id': 1, 'line': 4, 'message': 'Resolved locations: 0', 'verified': True}]}}
2024-10-18 09:18:33,521 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 7, 'type': 'response', 'request_seq': 3, 'success': True, 'command': 'setFunctionBreakpoints', 'body': {'breakpoints': []}}
2024-10-18 09:18:33,521 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 8, 'type': 'response', 'request_seq': 4, 'success': True, 'command': 'setExceptionBreakpoints'}
2024-10-18 09:18:33,523 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "configurationDone", "seq": 6, "type": "request"}
2024-10-18 09:18:33,524 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 9, 'type': 'event', 'event': 'output', 'body': {'category': 'console', 'output': 'Launching: /Users/kylekent/Desktop/tmp/vimspector_bug1/eg\n'}}
2024-10-18 09:18:33,831 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 10, 'type': 'event', 'event': 'output', 'body': {'category': 'console', 'output': 'Launched process 14283\n'}}
2024-10-18 09:18:33,832 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 11, 'type': 'response', 'request_seq': 1, 'success': True, 'command': 'launch'}
2024-10-18 09:18:33,833 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 12, 'type': 'response', 'request_seq': 6, 'success': True, 'command': 'configurationDone'}
2024-10-18 09:18:33,837 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "threads", "seq": 7, "type": "request"}
2024-10-18 09:18:33,837 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 13, 'type': 'event', 'event': 'module', 'body': {'module': {'id': '100000000', 'name': ''}, 'reason': 'removed'}}
2024-10-18 09:18:33,838 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 14, 'type': 'event', 'event': 'breakpoint', 'body': {'breakpoint': {'id': 1, 'line': 4, 'message': 'Resolved locations: 1', 'verified': True}, 'reason': 'changed'}}
2024-10-18 09:18:33,839 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 15, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '100010000', 'id': '100010000', 'name': 'dyld', 'path': '/usr/lib/dyld', 'symbolFilePath': '/usr/lib/dyld', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,839 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 16, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '100000000', 'id': '100000000', 'name': 'eg', 'path': '/Users/kylekent/Desktop/tmp/vimspector_bug1/eg', 'symbolFilePath': '/Users/kylekent/Desktop/tmp/vimspector_bug1/eg', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,839 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 17, 'type': 'event', 'event': 'continued', 'body': {'allThreadsContinued': True, 'threadId': 14482768}}
2024-10-18 09:18:33,840 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 18, 'type': 'event', 'event': 'module', 'body': {'module': {'id': 'FFFFFFFFFFFFFFFF', 'name': ''}, 'reason': 'removed'}}
2024-10-18 09:18:33,840 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 19, 'type': 'event', 'event': 'breakpoint', 'body': {'breakpoint': {'id': 1, 'line': 4, 'message': 'Resolved locations: 1', 'verified': True}, 'reason': 'changed'}}
2024-10-18 09:18:33,841 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 20, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18D9AB000', 'id': '18D9AB000', 'name': 'dyld', 'path': '/usr/lib/dyld', 'symbolFilePath': '/usr/lib/dyld', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,841 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 21, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '100000000', 'id': '100000000', 'name': 'eg', 'path': '/Users/kylekent/Desktop/tmp/vimspector_bug1/eg', 'symbolFilePath': '/Users/kylekent/Desktop/tmp/vimspector_bug1/eg', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,841 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 22, 'type': 'response', 'request_seq': 7, 'success': True, 'command': 'threads', 'body': {'threads': [{'id': 14482768, 'name': '1: tid=14482768'}]}}
2024-10-18 09:18:33,882 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 23, 'type': 'event', 'event': 'breakpoint', 'body': {'breakpoint': {'id': 2, 'message': 'Resolved locations: 2', 'verified': True}, 'reason': 'changed'}}
2024-10-18 09:18:33,883 - WARNING - breakpoints.py:561 - 0 - Unexpected update to breakpoint with id 2:breakpiont not found. {'id': 2, 'message': 'Resolved locations: 2', 'verified': True}
2024-10-18 09:18:33,883 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 24, 'type': 'event', 'event': 'breakpoint', 'body': {'breakpoint': {'id': 2, 'message': 'Resolved locations: 2', 'verified': True}, 'reason': 'changed'}}
2024-10-18 09:18:33,883 - WARNING - breakpoints.py:561 - 0 - Unexpected update to breakpoint with id 2:breakpiont not found. {'id': 2, 'message': 'Resolved locations: 2', 'verified': True}
2024-10-18 09:18:33,883 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 25, 'type': 'event', 'event': 'breakpoint', 'body': {'breakpoint': {'id': 2, 'message': 'Resolved locations: 2', 'verified': True}, 'reason': 'changed'}}
2024-10-18 09:18:33,883 - WARNING - breakpoints.py:561 - 0 - Unexpected update to breakpoint with id 2:breakpiont not found. {'id': 2, 'message': 'Resolved locations: 2', 'verified': True}
2024-10-18 09:18:33,883 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 26, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DC45000', 'id': '18DC45000', 'name': 'libc++.1.dylib', 'path': '/usr/lib/libc++.1.dylib', 'symbolFilePath': '/usr/lib/libc++.1.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 27, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A581000', 'id': '19A581000', 'name': 'libSystem.B.dylib', 'path': '/usr/lib/libSystem.B.dylib', 'symbolFilePath': '/usr/lib/libSystem.B.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 28, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DCD3000', 'id': '18DCD3000', 'name': 'libc++abi.dylib', 'path': '/usr/lib/libc++abi.dylib', 'symbolFilePath': '/usr/lib/libc++abi.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 29, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A57B000', 'id': '19A57B000', 'name': 'libcache.dylib', 'path': '/usr/lib/system/libcache.dylib', 'symbolFilePath': '/usr/lib/system/libcache.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 30, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A537000', 'id': '19A537000', 'name': 'libcommonCrypto.dylib', 'path': '/usr/lib/system/libcommonCrypto.dylib', 'symbolFilePath': '/usr/lib/system/libcommonCrypto.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 31, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A562000', 'id': '19A562000', 'name': 'libcompiler_rt.dylib', 'path': '/usr/lib/system/libcompiler_rt.dylib', 'symbolFilePath': '/usr/lib/system/libcompiler_rt.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 32, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A558000', 'id': '19A558000', 'name': 'libcopyfile.dylib', 'path': '/usr/lib/system/libcopyfile.dylib', 'symbolFilePath': '/usr/lib/system/libcopyfile.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 33, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DAA7000', 'id': '18DAA7000', 'name': 'libcorecrypto.dylib', 'path': '/usr/lib/system/libcorecrypto.dylib', 'symbolFilePath': '/usr/lib/system/libcorecrypto.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 34, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DB7C000', 'id': '18DB7C000', 'name': 'libdispatch.dylib', 'path': '/usr/lib/system/libdispatch.dylib', 'symbolFilePath': '/usr/lib/system/libdispatch.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 35, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DD33000', 'id': '18DD33000', 'name': 'libdyld.dylib', 'path': '/usr/lib/system/libdyld.dylib', 'symbolFilePath': '/usr/lib/system/libdyld.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 36, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A571000', 'id': '19A571000', 'name': 'libkeymgr.dylib', 'path': '/usr/lib/system/libkeymgr.dylib', 'symbolFilePath': '/usr/lib/system/libkeymgr.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 37, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A50F000', 'id': '19A50F000', 'name': 'libmacho.dylib', 'path': '/usr/lib/system/libmacho.dylib', 'symbolFilePath': '/usr/lib/system/libmacho.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 38, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '199AAC000', 'id': '199AAC000', 'name': 'libquarantine.dylib', 'path': '/usr/lib/system/libquarantine.dylib', 'symbolFilePath': '/usr/lib/system/libquarantine.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 39, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A56E000', 'id': '19A56E000', 'name': 'libremovefile.dylib', 'path': '/usr/lib/system/libremovefile.dylib', 'symbolFilePath': '/usr/lib/system/libremovefile.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 40, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '1933F4000', 'id': '1933F4000', 'name': 'libsystem_asl.dylib', 'path': '/usr/lib/system/libsystem_asl.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_asl.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 41, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DA40000', 'id': '18DA40000', 'name': 'libsystem_blocks.dylib', 'path': '/usr/lib/system/libsystem_blocks.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_blocks.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 42, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DBC6000', 'id': '18DBC6000', 'name': 'libsystem_c.dylib', 'path': '/usr/lib/system/libsystem_c.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_c.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 43, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A566000', 'id': '19A566000', 'name': 'libsystem_collections.dylib', 'path': '/usr/lib/system/libsystem_collections.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_collections.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 44, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '198D89000', 'id': '198D89000', 'name': 'libsystem_configuration.dylib', 'path': '/usr/lib/system/libsystem_configuration.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_configuration.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 45, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '197E0F000', 'id': '197E0F000', 'name': 'libsystem_containermanager.dylib', 'path': '/usr/lib/system/libsystem_containermanager.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_containermanager.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 46, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A1B2000', 'id': '19A1B2000', 'name': 'libsystem_coreservices.dylib', 'path': '/usr/lib/system/libsystem_coreservices.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_coreservices.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 47, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '1910CF000', 'id': '1910CF000', 'name': 'libsystem_darwin.dylib', 'path': '/usr/lib/system/libsystem_darwin.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_darwin.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 48, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '22D20E000', 'id': '22D20E000', 'name': 'libsystem_darwindirectory.dylib', 'path': '/usr/lib/system/libsystem_darwindirectory.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_darwindirectory.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 49, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A572000', 'id': '19A572000', 'name': 'libsystem_dnssd.dylib', 'path': '/usr/lib/system/libsystem_dnssd.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_dnssd.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 50, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DBC3000', 'id': '18DBC3000', 'name': 'libsystem_featureflags.dylib', 'path': '/usr/lib/system/libsystem_featureflags.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_featureflags.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 51, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DD5F000', 'id': '18DD5F000', 'name': 'libsystem_info.dylib', 'path': '/usr/lib/system/libsystem_info.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_info.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,884 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 52, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A4D4000', 'id': '19A4D4000', 'name': 'libsystem_m.dylib', 'path': '/usr/lib/system/libsystem_m.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_m.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 53, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DB45000', 'id': '18DB45000', 'name': 'libsystem_malloc.dylib', 'path': '/usr/lib/system/libsystem_malloc.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_malloc.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 54, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '193364000', 'id': '193364000', 'name': 'libsystem_networkextension.dylib', 'path': '/usr/lib/system/libsystem_networkextension.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_networkextension.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 55, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '191541000', 'id': '191541000', 'name': 'libsystem_notify.dylib', 'path': '/usr/lib/system/libsystem_notify.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_notify.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 56, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '198D8E000', 'id': '198D8E000', 'name': 'libsystem_sandbox.dylib', 'path': '/usr/lib/system/libsystem_sandbox.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_sandbox.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 57, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A56B000', 'id': '19A56B000', 'name': 'libsystem_secinit.dylib', 'path': '/usr/lib/system/libsystem_secinit.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_secinit.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 58, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DCEB000', 'id': '18DCEB000', 'name': 'libsystem_kernel.dylib', 'path': '/usr/lib/system/libsystem_kernel.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_kernel.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 59, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DD58000', 'id': '18DD58000', 'name': 'libsystem_platform.dylib', 'path': '/usr/lib/system/libsystem_platform.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_platform.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 60, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DD26000', 'id': '18DD26000', 'name': 'libsystem_pthread.dylib', 'path': '/usr/lib/system/libsystem_pthread.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_pthread.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 61, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '194DAB000', 'id': '194DAB000', 'name': 'libsystem_symptoms.dylib', 'path': '/usr/lib/system/libsystem_symptoms.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_symptoms.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 62, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DA8C000', 'id': '18DA8C000', 'name': 'libsystem_trace.dylib', 'path': '/usr/lib/system/libsystem_trace.dylib', 'symbolFilePath': '/usr/lib/system/libsystem_trace.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 63, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A545000', 'id': '19A545000', 'name': 'libunwind.dylib', 'path': '/usr/lib/system/libunwind.dylib', 'symbolFilePath': '/usr/lib/system/libunwind.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 64, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18DA45000', 'id': '18DA45000', 'name': 'libxpc.dylib', 'path': '/usr/lib/system/libxpc.dylib', 'symbolFilePath': '/usr/lib/system/libxpc.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 65, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '18D95C000', 'id': '18D95C000', 'name': 'libobjc.A.dylib', 'path': '/usr/lib/libobjc.A.dylib', 'symbolFilePath': '/usr/lib/libobjc.A.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,885 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 66, 'type': 'event', 'event': 'module', 'body': {'module': {'addressRange': '19A550000', 'id': '19A550000', 'name': 'liboah.dylib', 'path': '/usr/lib/liboah.dylib', 'symbolFilePath': '/usr/lib/liboah.dylib', 'symbolStatus': 'Symbols loaded.'}, 'reason': 'new'}}
2024-10-18 09:18:33,887 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 67, 'type': 'event', 'event': 'stopped', 'body': {'allThreadsStopped': True, 'reason': 'breakpoint', 'threadId': 14482768}}
2024-10-18 09:18:33,890 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "threads", "seq": 8, "type": "request"}
2024-10-18 09:18:33,891 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 68, 'type': 'response', 'request_seq': 8, 'success': True, 'command': 'threads', 'body': {'threads': [{'id': 14482768, 'name': '1: tid=14482768'}]}}
2024-10-18 09:18:33,891 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "stackTrace", "arguments": {"threadId": 14482768}, "seq": 9, "type": "request"}
2024-10-18 09:18:33,893 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 69, 'type': 'response', 'request_seq': 9, 'success': True, 'command': 'stackTrace', 'body': {'stackFrames': [{'column': 14, 'id': 1001, 'instructionPointerReference': '0x100001D3C', 'line': 4, 'name': 'main', 'source': {'name': 'eg.cpp', 'path': '/Users/kylekent/Desktop/tmp/vimspector_bug1/eg.cpp'}}, {'column': 0, 'id': 1002, 'instructionPointerReference': '0x18D9B10E0', 'line': 593, 'name': 'start', 'presentationHint': 'subtle', 'source': {'name': '@start', 'sourceReference': 1000}}]}}
2024-10-18 09:18:33,896 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "scopes", "arguments": {"frameId": 1001}, "seq": 10, "type": "request"}
2024-10-18 09:18:33,900 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 70, 'type': 'response', 'request_seq': 10, 'success': True, 'command': 'scopes', 'body': {'scopes': [{'expensive': False, 'name': 'Local', 'variablesReference': 1003}, {'expensive': False, 'name': 'Static', 'variablesReference': 1004}, {'expensive': False, 'name': 'Global', 'variablesReference': 1005}, {'expensive': False, 'name': 'Registers', 'variablesReference': 1006}]}}
2024-10-18 09:18:33,900 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "variables", "arguments": {"variablesReference": 1003}, "seq": 11, "type": "request"}
2024-10-18 09:18:33,910 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 71, 'type': 'response', 'request_seq': 11, 'success': True, 'command': 'variables', 'body': {'variables': [{'evaluateName': 'm', 'memoryReference': '0x16FDFF070', 'name': 'm', 'presentationHint': {'attributes': ['readOnly']}, 'type': 'std::map<char, int>', 'value': 'size=4294967295', 'variablesReference': 1007}]}}
2024-10-18 09:18:36,340 - DEBUG - debug_adapter_connection.py:205 - 0 - Sending Message: {"command": "variables", "arguments": {"variablesReference": 1007}, "seq": 12, "type": "request"}
2024-10-18 09:18:41,342 - DEBUG - debug_adapter_connection.py:266 - 0 - Message received: {'seq': 72, 'type': 'event', 'event': 'output', 'body': {'category': 'stderr', 'output': 'Child list expansion has timed out.\n'}}

### Vim version

```Text
NVIM v0.9.4
Build type: Release
LuaJIT 2.1.1697887905

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/opt/homebrew/Cellar/neovim/0.9.4/share/nvim"

Run :checkhealth for more info

### Python version

3.11.6 (main, Oct  2 2023, 20:46:14) [Clang 14.0.3 (clang-1403.0.22.14.1)]

### Neovim diagnostics

```Text
==============================================================================
coc: health#coc#check

- OK nvim version satisfied
- OK Environment check passed
- OK Javascript bundle build/index.js found
- OK Service started

==============================================================================
nvim: require("nvim.health").check()

Configuration ~
- OK no issues found

Runtime ~
- OK $VIMRUNTIME: /opt/homebrew/Cellar/neovim/0.9.4/share/nvim/runtime

Performance ~
- OK Build type: Release

Remote Plugins ~
- OK Up to date

terminal ~
- key_backspace (kbs) terminfo entry: `key_backspace=^H`
- key_dc (kdch1) terminfo entry: `key_dc=\E[3~`
- $TERM_PROGRAM="iTerm.app"
- $COLORTERM="truecolor"

==============================================================================
nvim-treesitter: require("nvim-treesitter.health").check()

Installation ~
- OK `tree-sitter` found 0.20.8 (parser generator, only needed for :TSInstallFromGrammar)
- OK `node` found v22.9.0 (only needed for :TSInstallFromGrammar)
- OK `git` executable found.
- OK `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
  Version: Apple clang version 15.0.0 (clang-1500.0.40.1)
- OK Neovim was compiled with tree-sitter runtime ABI version 14 (required >=13). Parsers must be compatible with runtime ABI.

OS Info:
{
  machine = "arm64",
  release = "23.1.0",
  sysname = "Darwin",
  version = "Darwin Kernel Version 23.1.0: Mon Oct  9 21:27:24 PDT 2023; root:xnu-10002.41.9~6/RELEASE_ARM64_T6000"
} ~

Parser/Features         H L F I J
  - arduino             ✓ ✓ ✓ ✓ ✓
  - bash                ✓ ✓ ✓ . ✓
  - c                   ✓ ✓ ✓ ✓ ✓
  - cmake               ✓ . ✓ ✓ ✓
  - cpp                 ✓ ✓ ✓ ✓ ✓
  - css                 ✓ . ✓ ✓ ✓
  - csv                 ✓ . . . .
  - dockerfile          ✓ . . . ✓
  - gitignore           ✓ . . . ✓
  - html                ✓ ✓ ✓ ✓ ✓
  - htmldjango          ✓ . ✓ ✓ ✓
  - ini                 ✓ . ✓ . ✓
  - javascript          ✓ ✓ ✓ ✓ ✓
  - json                ✓ ✓ ✓ ✓ .
  - lua                 ✓ ✓ ✓ ✓ ✓
  - markdown            ✓ . ✓ ✓ ✓
  - proto               ✓ . ✓ ✓ ✓
  - python              ✓ ✓ ✓ ✓ ✓
  - query               ✓ ✓ ✓ ✓ ✓
  - rust                ✓ ✓ ✓ ✓ ✓
  - sql                 ✓ . . ✓ ✓
  - typescript          ✓ ✓ ✓ ✓ ✓
  - vim                 ✓ ✓ ✓ . ✓
  - vimdoc              ✓ . . . ✓
  - yaml                ✓ ✓ ✓ ✓ ✓

  Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
         +) multiple parsers found, only one will be used
         x) errors found in the query, try to run :TSUpdate {lang} ~

==============================================================================
provider: health#provider#check

Clipboard (optional) ~
- OK Clipboard tool found: pbcopy

Python 3 provider (optional) ~
- `g:python3_host_prog` is not set.  Searching for python3.11 in the environment.
- Executable: /opt/homebrew/bin/python3.11
- Python version: 3.11.6
- pynvim version: 0.5.0
- OK Latest pynvim is installed.

Python virtualenv ~
- OK no $VIRTUAL_ENV

Ruby provider (optional) ~
- Ruby: ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23]
- WARNING `neovim-ruby-host` not found.
  - ADVICE:
    - Run `gem install neovim` to ensure the neovim RubyGem is installed.
    - Run `gem environment` to ensure the gem bin directory is in $PATH.
    - If you are using rvm/rbenv/chruby, try "rehashing".
    - See :help |g:ruby_host_prog| for non-standard gem installations.
    - You may disable this provider (and warning) by adding `let g:loaded_ruby_provider = 0` to your init.vim

Node.js provider (optional) ~
- Node.js: v22.9.0
- Nvim node.js host: /opt/homebrew/lib/node_modules/neovim/bin/cli.js
- WARNING Package "neovim" is out-of-date. Installed: 4.10.1, latest: 5.3.0
  - ADVICE:
    - Run in shell: npm install -g neovim
    - Run in shell (if you use yarn): yarn global add neovim
    - Run in shell (if you use pnpm): pnpm install -g neovim

Perl provider (optional) ~
- WARNING "Neovim::Ext" cpan module is not installed
  - ADVICE:
    - See :help |provider-perl| for more information.
    - You may disable this provider (and warning) by adding `let g:loaded_perl_provider = 0` to your init.vim

==============================================================================
vim.lsp: require("vim.lsp.health").check()

- LSP log level : WARN
- Log path: /Users/kylekent/.local/state/nvim/lsp.log
- Log size: 0 KB

vim.lsp: Active Clients ~
- No active clients

==============================================================================
vim.treesitter: require("vim.treesitter.health").check()

- Nvim runtime ABI version: 14
- OK Parser: arduino    ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/arduino.so
- OK Parser: bash       ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/bash.so
- OK Parser: c          ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/c.so
- OK Parser: cmake      ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/cmake.so
- OK Parser: cpp        ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/cpp.so
- OK Parser: css        ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/css.so
- OK Parser: csv        ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/csv.so
- OK Parser: dockerfile ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/dockerfile.so
- OK Parser: gitignore  ABI: 13, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/gitignore.so
- OK Parser: html       ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/html.so
- OK Parser: htmldjango ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/htmldjango.so
- OK Parser: ini        ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/ini.so
- OK Parser: javascript ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/javascript.so
- OK Parser: json       ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/json.so
- OK Parser: lua        ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/lua.so
- OK Parser: markdown   ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/markdown.so
- OK Parser: proto      ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/proto.so
- OK Parser: python     ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/python.so
- OK Parser: query      ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/query.so
- OK Parser: rust       ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/rust.so
- OK Parser: sql        ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/sql.so
- OK Parser: typescript ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/typescript.so
- OK Parser: vim        ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/vim.so
- OK Parser: vimdoc     ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/vimdoc.so
- OK Parser: yaml       ABI: 14, path: /Users/kylekent/.local/share/nvim/plugged/nvim-treesitter/parser/yaml.so
- OK Parser: c          ABI: 14, path: /opt/homebrew/Cellar/neovim/0.9.4/lib/nvim/parser/c.so
- OK Parser: lua        ABI: 14, path: /opt/homebrew/Cellar/neovim/0.9.4/lib/nvim/parser/lua.so
- OK Parser: query      ABI: 14, path: /opt/homebrew/Cellar/neovim/0.9.4/lib/nvim/parser/query.so
- OK Parser: vim        ABI: 14, path: /opt/homebrew/Cellar/neovim/0.9.4/lib/nvim/parser/vim.so
- OK Parser: vimdoc     ABI: 14, path: /opt/homebrew/Cellar/neovim/0.9.4/lib/nvim/parser/vimdoc.so

Operating System

Darwin Kyles-MBP-2.attlocal.net 23.1.0 Darwin Kernel Version 23.1.0: Mon Oct 9 21:27:24 PDT 2023; root:xnu-10002.41.9~6/RELEASE_ARM64_T6000 arm64

Declaration

kentkr commented 3 weeks ago

So this actually does replicate in vim.

Luckily on further inspection just waiting +30s to let vimspector do its thing allows it to function. The problem must've been running things like :VimspectorRestart in the middle of a process.

This doesn't occur in lldb on its own, so vimspector isn't working as expected. I'm happy to help profile and contribute if needed.

puremourning commented 2 weeks ago

Thanks for the clear report and repro steps!

I gave it a spin and findings:

1) this is entirely due to the debug adapter returning a very large number of child items. Vimspector doesn't implement variable paging, which I think exists in the protocol, but I suppose it could at a cost of Ben Hours. 2) what did you expect to happen in expanding an uninitialised map? the map is uninitialised random data. there's no way for the debugger (lldb) to know that, so it reads a random value for the size of the map then tries to walk infinite memory, producing garbage.

Garbage in... garbage out.

But FWIW when I try your repro, I get this:

 *- m: size=7544
   *+ [0]: {first:'\0', second:0}
Screenshot 2024-11-07 at 19 32 18

so my random value was 7544

opening this took ~ 10ms which is of course forever in computing terms, but not so bad in human terms. I've no doubt if the random number was 2^63 it would take a long time indeed.

I admit the code that draws these "trees" is awful and extremely inefficient python slop, but short of implementing paging (which is very expensive in Ben Time) for a fairly rare issue, I'm not sure it's worth it.

I've converted this to a feature request for restricting the number of variables requested or implementing paging.

puremourning commented 2 weeks ago

I pushed a branch with a possible hack around to limit the number of children printed.

Can you try it?

https://github.com/puremourning/vimspector/pull/892

Screenshot 2024-11-07 at 19 42 59
kentkr commented 2 weeks ago
  1. what did you expect ...

Nothing! I'm new to c++ lol.

I agree with your assessment, this is rare (also avoidable) and ben time is very rare commodity. After learning more about c++ I see why this would happen. Is there a reason your map would be 7544 while mine is 2^63?

I tried #892, it was slow but worked on the first pass. After opening the map again it broke with similar errors.

If this plagues me more and I have free time I may reach out to contribute. Thanks for taking a look.

puremourning commented 2 weeks ago

Is there a reason your map would be 7544 while mine is 2^63?

no it is random. Look up uninitialised variables in your c++ text book.