summaryrefslogtreecommitdiff
path: root/lldb/packages/Python
AgeCommit message (Collapse)Author
2025-07-03[lldb-dap] Prevent using an implicit `step-in`. (#143644)Ebuka Ezike
When there is a function that is inlined at the current program counter. If you get the current `line_entry` using the program counter's address it will point to the location of the inline function that may be in another file. (this is in implicit step-in and should not happen what step over is called). Use the current frame to get the `line_entry`
2025-07-03[lldb][test] Synchronize `__compressed_pair_padding` with libc++ (#142516)A. Jiang
This PR mirrors changes of `__compressed_pair_padding` in libc++ into lldb test suite. Related PR for libc++: - #108956 - #109028 - #142125
2025-06-25[lldb] Fix FindProcessImpl() for iOS simulators (#139174)royitaqi
# Benefit This patch fixes: 1. After `platform select ios-simulator`, `platform process list` will now print processes which are running in the iOS simulator. Previously, no process will be listed. 2. After `platform select ios-simulator`, `platform attach --name <name>` will succeed. Previously, it will error out saying no process is found. # Several bugs that is being fixed 1. During the process listing, add `aarch64` to the list of CPU types for which iOS simulators are checked for. 2. Given a candidate process, when checking for simulators, the original code will find the desired environment variable (`SIMULATOR_UDID`) and set the OS to iOS, but then the immediate next environment variable will set it back to macOS. 3. For processes running on simulator, set the triple's `Environment` to `Simulator`, so that such processes can pass the filtering [in this line](https://fburl.com/8nivnrjx). The original code leave it as the default `UnknownEnvironment`. # Manual test **With this patch:** ``` royshi-mac-home ~/public_llvm/build % bin/lldb (lldb) platform select ios-simulator (lldb) platform process list 240 matching processes were found on "ios-simulator" PID PARENT USER TRIPLE NAME ====== ====== ========== ============================== ============================ 40511 28844 royshi arm64-apple-ios-simulator FocusPlayground // my toy iOS app running on simulator ... // omit 28844 1 royshi arm64-apple-ios-simulator launchd_sim (lldb) process attach --name FocusPlayground Process 40511 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP frame #0: 0x0000000104e3cb70 libsystem_kernel.dylib`mach_msg2_trap + 8 libsystem_kernel.dylib`mach_msg2_trap: -> 0x104e3cb70 <+8>: ret ... // omit ``` **Without this patch:** ``` $ bin/lldb (lldb) platform select ios-simulator (lldb) platform process list error: no processes were found on the "ios-simulator" platform (lldb) process attach --name FocusPlayground error: attach failed: could not find a process named FocusPlayground ``` # Unittest See PR.
2025-06-25[lldb] Fix qEcho message handling. (#145675)eleviant
This fixes issues found in e066f35c6981c720e3a7e5883efc40c861b3b7, which was later reverted. The problem was with "k" message which was sent with sync_on_timeout flag set to true, so lldb was waiting for response, which is currently not being sent by lldb-server. Not waiting for response at all seems to be not a solution, because on MAC OS X lldb waits for response from "k" to gracefully kill inferior.
2025-06-24Reland "[lldb] Add count for number of DWO files loaded in statistics ↵qxy11
#144424" (#145572) This relands changes in #144424 for adding a count of DWO files parsed/loaded and the total number of DWO files. The previous PR was reverted in #145494 due to the newly added unit tests failing on Windows and MacOS CIs since these platforms don't support DWO. This change add an additional `@add_test_categories(["dwo"])` to the new tests to [skip](https://github.com/llvm/llvm-project/blob/cd46354dbd10820158edabe14dbd49d9f9010722/lldb/packages/Python/lldbsuite/test/test_categories.py#L56) these tests on Windows/MacOS. Original PR: #144424 ### Testing Ran unit tests ``` $ bin/lldb-dotest -p TestStats.py llvm-project/lldb/test/API/commands/statistics/basic/ ---------------------------------------------------------------------- Ran 24 tests in 211.391s OK (skipped=3) ```
2025-06-24Revert "[lldb] Add count for number of DWO files loaded in statistics" (#145494)Michael Buch
Reverts llvm/llvm-project#144424 Caused CI failures. macOS CI failure was: ``` 10:20:36 FAIL: test_dwp_dwo_file_count (TestStats.TestCase) 10:20:36 Test "statistics dump" and the loaded dwo file count. 10:20:36 ---------------------------------------------------------------------- 10:20:36 Traceback (most recent call last): 10:20:36 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/commands/statistics/basic/TestStats.py", line 639, in test_dwp_dwo_file_count 10:20:36 self.assertEqual(debug_stats["totalDwoFileCount"], 2) 10:20:36 AssertionError: 0 != 2 10:20:36 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 10:20:36 ====================================================================== 10:20:36 FAIL: test_no_debug_names_eager_loads_dwo_files (TestStats.TestCase) 10:20:36 Test the eager loading behavior of DWO files when debug_names is absent by 10:20:36 ---------------------------------------------------------------------- 10:20:36 Traceback (most recent call last): 10:20:36 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/commands/statistics/basic/TestStats.py", line 566, in test_no_debug_names_eager_loads_dwo_files 10:20:36 self.assertEqual(debug_stats["totalDwoFileCount"], 2) 10:20:36 AssertionError: 0 != 2 10:20:36 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang 10:20:36 ====================================================================== 10:20:36 FAIL: test_split_dwarf_dwo_file_count (TestStats.TestCase) 10:20:36 Test "statistics dump" and the dwo file count. 10:20:36 ---------------------------------------------------------------------- 10:20:36 Traceback (most recent call last): 10:20:36 File "/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/lldb/test/API/commands/statistics/basic/TestStats.py", line 588, in test_split_dwarf_dwo_file_count 10:20:36 self.assertEqual(len(debug_stats["modules"]), 1) 10:20:36 AssertionError: 42 != 1 10:20:36 Config=arm64-/Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/lldb-build/bin/clang ```
2025-06-23[lldb] Add count for number of DWO files loaded in statistics (#144424)qxy11
## Summary A new `totalLoadedDwoFileCount` and `totalDwoFileCount` counters to available statisctics when calling "statistics dump". 1. `GetDwoFileCounts ` is created, and returns a pair of ints representing the number of loaded DWO files and the total number of DWO files, respectively. An override is implemented for `SymbolFileDWARF` that loops through each compile unit, and adds to a counter if it's a DWO unit, and then uses `GetDwoSymbolFile(false)` to check whether the DWO file was already loaded/parsed. 3. In `Statistics`, use `GetSeparateDebugInfo` to sum up the total number of loaded/parsed DWO files along with the total number of DWO files. This is done by checking whether the DWO file was already successfully `loaded` in the collected DWO data, anding adding to the `totalLoadedDwoFileCount`, and adding to `totalDwoFileCount` for all CU units. ## Expected Behavior - When binaries are compiled with split-dwarf and separate DWO files, `totalLoadedDwoFileCount` would be the number of loaded DWO files and `totalDwoFileCount` would be the total count of DWO files. - When using a DWP file instead of separate DWO files, `totalLoadedDwoFileCount` would be the number of parsed compile units, while `totalDwoFileCount` would be the total number of CUs in the DWP file. This should be similar to the counts we get from loading separate DWO files rather than only counting whether a single DWP file was loaded. - When not using split-dwarf, we expect both `totalDwoFileCount` and `totalLoadedDwoFileCount` to be 0 since no separate debug info is loaded. ## Testing **Manual Testing** On an internal script that has many DWO files, `statistics dump` was called before and after a `type lookup` command. The `totalLoadedDwoFileCount` increased as expected after the `type lookup`. ``` (lldb) statistics dump { ... "totalLoadedDwoFileCount": 29, } (lldb) type lookup folly::Optional<unsigned int>::Storage typedef std::conditional<true, folly::Optional<unsigned int>::StorageTriviallyDestructible, folly::Optional<unsigned int>::StorageNonTriviallyDestructible>::type typedef std::conditional<true, folly::Optional<unsigned int>::StorageTriviallyDestructible, folly::Optional<unsigned int>::StorageNonTriviallyDestructible>::type ... (lldb) statistics dump { ... "totalLoadedDwoFileCount": 2160, } ``` **Unit test** Added three unit tests that build with new "third.cpp" and "baz.cpp" files. For tests with w/ flags `-gsplit-dwarf -gpubnames`, this generates 2 DWO files. Then, the test incrementally adds breakpoints, and does a type lookup, and the count should increase for each of these as new DWO files get loaded to support these. ``` $ bin/lldb-dotest -p TestStats.py ~/llvm-sand/external/llvm-project/lldb/test/API/commands/statistics/basic/ ---------------------------------------------------------------------- Ran 20 tests in 211.738s OK (skipped=3) ```
2025-06-23[lldb] Add support for NoneType to decorator skipIfBuildType (#145342)Ivan Tadeu Ferreira Antunes Filho
Currently if cmake_build_type is None we error with `AttributeError: 'NoneType' object has no attribute 'lower'` if the decorator skipIfBuildType is used. This fixes the issue by first checking that cmake_build_type is not None.
2025-06-23[lldb-dap][test] Refactor runInTerminal Tests. (#144954)Ebuka Ezike
Replace `isTestSupported` function with `skipIfBuildType` annotation. Test that uses the `IsTestSupported` function are no longer run, as the size of lldb-dap binary is now more than `1mb`. Update the broken test. Fixes #108621 We could probably check if the test now passes on `linux arm` since it was disabled because it timed out. I experienced the timeout after replacing the `IsTestSupported` with `skipIfBuildType`.
2025-06-22Revert "[lldb] Fix qEcho message handling (#145072)" (#145241)eleviant
Temporarily revert commit e066f35c6981c720e3a7e5883efc40c861b3b7ee, because lldb tests randomly hang after it's been pushed.
2025-06-21[lldb] Fix qEcho message handling (#145072)eleviant
Patch fixes the sync-on-timeout logic in lldb and switches to qEcho based ping, instead of qC. This fixes vRun message case, when there is no process yet and qC returns an error.
2025-06-17Revert "[lldb-dap] Refactoring DebugCommunication to improve test ↵John Harrison
consistency. (#143818) This reverts commit 362b9d78b4ee9107da2b5e90b3764b0f0fa610fe. Buildbots using python3.10 are running into errors from this change.
2025-06-17[lldb-dap] Refactoring DebugCommunication to improve test consistency. (#143818)John Harrison
In DebugCommunication, we currently are using 2 thread to drive lldb-dap. At the moment, they make an attempt at only synchronizing the `recv_packets` between the reader thread and the main test thread. Other stateful properties of the debug session are not guarded by a locks/mutex. To mitigate this, I am moving any state updates to the main thread inside the `_recv_packet` method to ensure that between calls to `_recv_packet` the state does not change out from under us in a test. This does mean the precise timing of events has changed slightly as a result and I've updated the existing tests that fail for me locally with this new behavior. I think this should result in overall more predictable behavior, even if the test is slow due to the host workload or architecture differences. --------- Co-authored-by: Ebuka Ezike <yerimyah1@gmail.com>
2025-06-16[lldb-dap] Creating protocol types for setExceptionBreakpoints. (#144153)John Harrison
This adds new types for setExceptionBreakpoints and adds support for `supportsExceptionFilterOptions`, which allows exception breakpoints to set a condition. While testing this, I noticed that obj-c exception catch breakpoints may not be working correctly in lldb-dap.
2025-06-16[lldb-dap] Use structured types for stepInTargets request (#144072)Ebuka Ezike
uses the `SendTargetCapabilities` from #142831
2025-06-10[lldb] Revive TestSimulatorPlatform.py (#142244)Jonas Devlieghere
This test was incorrectly disabled and bitrotted since then. This PR fixes up the test and re-enables it. - Build against the system libc++ (which can target the simulator) - Bump the deployment target for iOS and tvOS on Apple Silicon - Skip backdeploying to pre-Apple Silicon OS on Apple Silicon.
2025-06-10[lldb-dap] Creating a 'capabilities' event helper. (#142831)John Harrison
This adds a new 'CapabilitiesEventBody' type for having a well structured type for the event and updates the 'restart' request to dynamically set their capabilities.
2025-06-05[lldb-dap] Migrating 'threads' request to structured types. (#142510)John Harrison
Moving `threads` request to structured types. Adding helper types for this and moving helpers from JSONUtils to ProtocolUtils. --------- Co-authored-by: Ebuka Ezike <yerimyah1@gmail.com> Co-authored-by: Jonas Devlieghere <jonas@devlieghere.com>
2025-06-04Revert "[lldb-dap] Use structured types for stepInTargets request (#142439)" ↵Jonas Devlieghere
(#142891) This reverts commit 4b6c608615a285d81132acf8e33b81b2ec2c9bf9 and follow-up commits 159de3633640a5cb2d322ebe8cc4ec0c1c9a896d and c9e1c52e2e75a91a44a98df818cc9bd11655e51d because this breaks TestDAP_stepInTargets.py on Darwin. https://green.lab.llvm.org/job/llvm.org/view/LLDB/job/as-lldb-cmake
2025-06-04[lldb-dap] Use structured types for stepInTargets request (#142439)Ebuka Ezike
2025-05-31[lldb-dap] Synchronously wait for breakpoints resolves in tests (#140470)Ely Ronnen
Attempt to improve tests by synchronously waiting for breakpoints to resolve. Not sure if it will fix all the tests but I think it should make the tests more stable
2025-05-30Revert "[lldb-dap] Test Gardening, improving DebugCommunication. (#141689)"David Spickett
This reverts commit 8a49db35f45e56c92522c6079e51553e80c07aec. Due to failures on Arm and AArch64 Linux: https://lab.llvm.org/buildbot/#/builders/59/builds/18540 https://lab.llvm.org/buildbot/#/builders/18/builds/16759 File "/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/llvm-project/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py", line 22, in assertEvaluateFailure self.assertNotIn( AssertionError: 'result' unexpectedly found in {'memoryReference': '0xFFFFF7CB3060', 'result': '0x0000000000000000', 'type': 'int *', 'variablesReference': 7} FAIL: test_generic_evaluate_expressions (TestDAP_evaluate.TestDAP_evaluate) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/llvm-project/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py", line 228, in test_generic_evaluate_expressions self.run_test_evaluate_expressions(enableAutoVariableSummaries=False) File "/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/llvm-project/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py", line 117, in run_test_evaluate_expressions self.assertEvaluateFailure("list") # local variable of a_function File "/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/llvm-project/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py", line 22, in assertEvaluateFailure self.assertNotIn( AssertionError: 'result' unexpectedly found in {'memoryReference': '0xFFFFF7CB3060', 'result': '0x0000000000000000', 'type': 'int *', 'variablesReference': 7} Config=aarch64-/home/tcwg-buildbot/worker/lldb-aarch64-ubuntu/build/bin/clang The second one is because our bots have the libc debug info package installed, the first, no idea.
2025-05-29[lldb-dap] Test Gardening, improving DebugCommunication. (#141689)John Harrison
Improving the readability and correctness of DebugCommunication by adding type annotations to many parts of the library and trying to improve the implementation of a few key areas of the code to better handle correctness. Specifically, this refactored the `DebugCommunication._handle_recv_packet` function to ensure consistency with the reader thread when handling state changes and improved the `DebugCommunication._recv_packet` helper to make it easier to follow by adding some additional helpers.
2025-05-28[libc++][lldb-dap][test] Fix CI for bootstrapping-build (#141543)A. Jiang
#140107 changed the default argument of `disableASLR` of related functions from `False` to `True`. libc++ CI has been stably failing for `TestDAP_subtleFrames.py` (in bootstrapping-build) since then. The error message "personality set failed: Operation not permitted" seems related to ASLR. This PR attempts to fix the CI failure by changing the default value of `disableASLR` in `dap_server.py` to `False`.
2025-05-23[lldb] Adding a new decorator for CMAKE_BUILD_TYPE. (#141159)John Harrison
In lldb-dap, we have existing tests that are known to be unstable when lldb and lldb-dap are built in the Debug configuration. This decorator lets us skip those tests in CI jobs that are to slow with those configurations. This was split out from #140777 to make the patches smaller.
2025-05-21[lldb-dap] assembly breakpoints (#139969)Ely Ronnen
* Support assembly source breakpoints * Change `sourceReference` to be the symbol load address for simplicity and consistency across threads/frames [Screencast From 2025-05-17 23-57-30.webm](https://github.com/user-attachments/assets/2e7c181d-42c1-4121-8f13-b180c19d0e33)
2025-05-21[lldb][lldb-dap][tests] Make sure evaluate test exists with no errors. (#140788)Ebuka Ezike
2025-05-21[lldb-dap] fix disassembly request instruction offset handling (#140486)Ely Ronnen
Fix the handling of the `instructionOffset` parameter, which resulted in always returning the wrong disassembly because VSCode always uses `instructionOffset = -50` and expects 50 instructions before the given address, instead of 50 bytes before
2025-05-16[lldb-dap] Take two at refactoring the startup sequence. (#140331)John Harrison
This is more straight forward refactor of the startup sequence that reverts parts of ba29e60f9a2222bd5e883579bb78db13fc5a7588. Unlike my previous attempt, I ended up removing the pending request queue and not including an `AsyncReqeustHandler` because I don't think we actually need that at the moment. The key is that during the startup flow there are 2 parallel operations happening in the DAP that have different triggers. * The `initialize` request is sent and once the response is received the `launch` or `attach` is sent. * When the `initialized` event is recieved the `setBreakpionts` and other config requests are made followed by the `configurationDone` event. I moved the `initialized` event back to happen in the `PostRun` of the `launch` or `attach` request handlers. This ensures that we have a valid target by the time the configuration calls are made. I added also added a few extra validations that to the `configurationeDone` handler to ensure we're in an expected state. I've also fixed up the tests to match the new flow. With the other additional test fixes in 087a5d2ec7897cd99d3787820711fec76a8e1792 I think we've narrowed down the main source of test instability that motivated the startup sequence change.
2025-05-16[lldb-dap] Adding additional asserts to unit tests. (#140107)John Harrison
Adding an assert that the 'continue' request succeeds caused a number of tests to fail. This showed a number of tests that were not specifying if they should be stopped or not at key points in the test. This is likely contributing to these tests being flaky since the debugger is not in the expected state. Additionally, I spent a little time trying to improve the readability of the dap_server.py and lldbdap_testcase.py.
2025-05-13[lldb-dap] Improving tests logging to understand CI failures. (#139311)John Harrison
To improve logging this adjusts two properties of the existing tests: * Forwards stderr from lldb-dap to the process in case errors are reported to stderr. * Adjusts `DebugAdapterServer.terminate` to close stdin and wait for the process to exit instead of sending SIGTERM. Additionally, if we end up with a non-zero exit status we now raise an error to note the unexpected exit status. With these changes, I did find one test case in `TestDAP_console.test_diagnositcs` that was not waiting to ensure the expected event had arrived by the time it performed an assert.
2025-05-13[lldb] Move lldb_enable_attach from test_common to a separate header (#139550)Pavel Labath
test_common is force-included into every compilation, which causes problems when we're compiling assembly code, as we were in #138805. This avoids that as we can include the header only when it's needed.
2025-05-09[lldb-dap] Don't emit a removed module event for unseen modules (#139324)Jonas Devlieghere
2025-05-07[lldb-dap] Change the launch sequence (#138219) (reland)Jonas Devlieghere
This PR changes how we treat the launch sequence in lldb-dap. - Send the initialized event after we finish handling the initialize request, rather than after we finish attaching or launching. - Delay handling the launch and attach request until we have handled the configurationDone request. The latter is now largely a NO-OP and only exists to signal lldb-dap that it can handle the launch and attach requests. - Delay handling the initial threads requests until we have handled the launch or attach request. - Make all attaching and launching synchronous, including when we have attach or launch commands. This removes the need to synchronize between the request and event thread. Background: https://discourse.llvm.org/t/reliability-of-the-lldb-dap-tests/86125
2025-05-07Revert "[lldb-dap] Change the launch sequence (#138219)"David Spickett
This reverts commit ba29e60f9a2222bd5e883579bb78db13fc5a7588. As it broke tests on Windows on Arm: https://lab.llvm.org/buildbot/#/builders/141/builds/8500 ******************** Unresolved Tests (2): lldb-api :: tools/lldb-dap/completions/TestDAP_completions.py lldb-api :: tools/lldb-dap/startDebugging/TestDAP_startDebugging.py ******************** Timed Out Tests (1): lldb-api :: tools/lldb-dap/send-event/TestDAP_sendEvent.py ******************** Failed Tests (6): lldb-api :: tools/lldb-dap/console/TestDAP_console.py lldb-api :: tools/lldb-dap/console/TestDAP_redirection_to_console.py lldb-api :: tools/lldb-dap/launch/TestDAP_launch.py lldb-api :: tools/lldb-dap/stackTrace/TestDAP_stackTrace.py lldb-api :: tools/lldb-dap/stackTraceDisassemblyDisplay/TestDAP_stackTraceDisassemblyDisplay.py lldb-api :: tools/lldb-dap/variables/children/TestDAP_variables_children.py
2025-05-06Revert "[lldb-dap] Don't make stopOnAttach the default in attach tests"Jonas Devlieghere
This reverts commit 69a0af35a5860156836e9e295ecef9de3474db11 as it's timing out on the bots.
2025-05-06[lldb-dap] Don't make stopOnAttach the default in attach testsJonas Devlieghere
Make stopOnAttach=False the default again and explicitly pass stopOnAttach=True where the tests relies on that. I changed the default in the launch sequence PR (#138219) because that was implicitly the assumption (the tests never send the configurationDone request).
2025-05-06[lldb-dap] Change the launch sequence (#138219)Jonas Devlieghere
This PR changes how we treat the launch sequence in lldb-dap. - Send the initialized event after we finish handling the initialize request, rather than after we finish attaching or launching. - Delay handling the launch and attach request until we have handled the configurationDone request. The latter is now largely a NO-OP and only exists to signal lldb-dap that it can handle the launch and attach requests. - Delay handling the initial threads requests until we have handled the launch or attach request. - Make all attaching and launching synchronous, including when we have attach or launch commands. This removes the need to synchronize between the request and event thread. Background: https://discourse.llvm.org/t/reliability-of-the-lldb-dap-tests/86125
2025-05-05[lldb-dap] Give attach test binaries unique names (#138435)Jonas Devlieghere
Give the test binaries used for attaching unique names to avoid accidentally attaching to the wrong binary. Fixes #138197
2025-04-30[NFC][lldb][test] Fix typo in test setup commands. (#137944)Ebuka Ezike
2025-04-29[lldb] Provide an unconditional @skip annotation for API tests (#137712)Jonas Devlieghere
The correct way of doing this today is to use `@skipIf` with no arguments, which reads like it expects a condition. Fixes #137710
2025-04-28[lldb-dap] Fix TestDap_attach.py flakiness (#137278)Wanyi
# Summary This patch makes the `request_attach` wait for events `process` and `initialized` just like `request_launch`. This ensure the DAP session can move forward somewhat correctly. Recently `TestDap_attach.test_terminate_commands` became flaky. It's hitting: ``` lldbsuite/test/tools/lldb-dap/dap_server.py", line 350, in send_recv raise ValueError(desc) ValueError: no response for "disconnect" ``` I took a look at the DAP msg from that test case and noticed: - It's not using the regular attaching, instead it's using the `attachCommands` to launch debug the binary and it will stop at entry. - The `initialized` event returned after the `disconnect` request. Which means lldb-dap didn't really get ready yet. ### NOTE The `dap_server.py` is doing things to mimic the VSCode (or other dap clients) but it had some assumptions. For example, it's still missing the `configurationDone` request and response because it relies on a continue action to trigger the `configurationDone` request. # Test Plan ``` ./bin/llvm-lit -va /Users/wanyi/llvm-upstream/llvm-project/lldb/test/API/tools/lldb-dap/attach/TestDAP_attach.py ./bin/llvm-lit -va /Users/wanyi/llvm-upstream/llvm-project/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch.py ``` To test the `wait_for_events` timeout case ``` events = self.wait_for_events(["process", "initialized", "fake", "event"], 1) if events: raise ValueError(f'no events {",".join(events)} found for within timeout 1') ``` Observed <img width="696" alt="image" src="https://github.com/user-attachments/assets/bc97c0ef-d91f-4561-8272-4d36f5f5d4e6" /> ### Also Looks like some test cases should be re-enabled in https://github.com/llvm/llvm-project/commit/0b8dfb5762fdc350c5071c9eeffd4f7e4d495e98 But only comments was removed. The skip statements survived the change.
2025-04-27[lldb-dap] Support the Module Event (#137380)Jonas Devlieghere
The module event indicates that some information about a module has changed. The event is supported by the Emacs and Visual Studio DAP clients. This PR adds support for emitting the event from lldb-dap. Fixes #137058
2025-04-25[lldb-dap] Fix broken tests with commanEscapePrefix="" (#137384)Ely Ronnen
* Fix broken tests that use commanEscapePrefix="", in my case `TestDAP_stackTraceMissingModule.test_missingModule`
2025-04-25[lldb] Emit diagnostics as "important" output (#137280)Jonas Devlieghere
Handle diagnostics events from the debugger (i.e. asynchronous errors and warnings) in the lldb-dap event handler and emit them as "important" output.
2025-04-25[lldb-dap] Refactoring lldb-dap 'launch' request to use typed ↵John Harrison
RequestHandler<>. (#133624) This converts a number of json::Value's into well defined types that are used throughout lldb-dap and updates the 'launch' command to use the new well defined types. --------- Co-authored-by: Jonas Devlieghere <jonas@devlieghere.com>
2025-04-24[lldb-dap] Support StackFrameFormat (#137113)Jonas Devlieghere
The debug adapter protocol supports an option to provide formatting information for a stack frames as part of the StackTrace request. lldb-dap incorrectly advertises it supports this, but until this PR that support wasn't actually implemented. Fixes #137057
2025-04-23[lldb] returning command completions up to a maximum (#135565)Ely Ronnen
- Adding `max_return_elements` field to `CompletionRequest`. - adding maximum checks to `SymbolCompleter` and `SourceFileCompleter`. Fixes #135553
2025-04-19[lldb-dap] Remove an incorrect assumption on reverse requests. (#136210)John Harrison
Reverse requests do have a 'seq' set still from VSCode. I incorrectly interpreted https://github.com/microsoft/vscode/blob/dede7bb4b7e9c9ec69155a243bb84037a40588fe/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts#L65 to mean they have a 'seq' of '0', however the 'seq' is set in 'internalSend' here https://github.com/microsoft/vscode/blob/dede7bb4b7e9c9ec69155a243bb84037a40588fe/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.ts#L178. Removing the check that 'seq=0' on reverse requests and updating the dap_server.py impl to also set the seq.
2025-04-15[lldb] Make SBProcess thread related actions listen to StopLocker (#134339)Wanyi
# Summary This PR updates `SBProcess::GetNumThreads()` and `SBProcess::GetThreadAtIndex()` to listen to the stop locker. `SBProcess::GetNumThreads()` will return 0 if the process is running. ## Problem Description Recently upon debugging a program with thousands of threads in VS Code, lldb-dap would hang at a `threads` request sent right after receiving the `configurationDone` response. Soon after it will end the debug session with the following error ``` Process <pid> exited with status = -1 (0xffffffff) lost connection ``` This is because LLDB is still in the middle of resuming all the threads. And requesting threads will end up interrupt the process on Linux. From the gdb-remote log it ended up getting `lldb::StateType::eStateInvalid` and just exit with status -1. I don't think it's reasonable to allow getting threads from a running process. There are a few approaches to fix this: 1) Send the stopped event to IDE after `configurationDone`. This aligns with the CLI behavior. 2) However, the above approach will break the existing user facing behavior. The alternative will be reject the `threads` request if the process is not stopped. 3) Improve the run lock. This is a synchronize issue where process was in the middle of resuming while lldb-dap attempts to interrupt it. **This PR implements the option 3** ## HOWEVER This fixed the "lost connection" issue below but new issue has surfaced. From testing, and also from checking the [VSCode source code](https://github.com/microsoft/vscode/blob/174af221c9ea2ccdb64abe4aab8e1a805e77beae/src/vs/workbench/contrib/debug/browser/debugSession.ts#L791), it expects having threadID to perform `pause`. So after attaching, without any threads reported to the client, the user will not be able to pause the attached process. `setBreakpoint` will still work and once we make a stop at the bp (or any stop that will report threads, client can perform pause again. ## NEXT 1) Made an attempt to return initial thread list so that VSCode can pause (second commit in the PR) 2) Investigate why threads will trigger unwinding the second frame of a thread, which leads to sending the interrupt 3) Decided if we want to support `stopOnEntry` for attaching, given i. This is not an official specification ii. If enable stopOnEntry, we need to fix attaching on Linux, to send only one stopped event. Currently, all threads upon attaching will have stop reason `SIGSTOP` and lldb-dap will send `stopped` event for each one of them. Every `stopped` will trigger the client request for threads. iii. Alternatively, we can support auto continue correspond to `(lldb) process attach --continue`. This require the ii above. ### Additionally lldb-dap will not send a `continued` event after `configurationDone` because it checks `dap.focus_tid == LLDB_INVALID_THREAD_ID` (so that we don't send it for `launch` request). Notice `dap.focus_tid` will only get assigned when handling stop or stepping. According to DAP > Please note: a debug adapter is not expected to send this event in response to a request that implies that execution continues, e.g. launch or continue. It is only necessary to send a continued event if there was no previous request that implied this. So I guess we are not violating DAP if we don't send `continued` event. But I'd like to get some sense about this. ## Test Plan Used following program for testing: https://gist.github.com/kusmour/1729d2e07b7b1063897db77de194e47d **NOTE: Utilize stdin to get pid and attach AFTER hitting enter. Attach should happen when all the threads start running.** DAP messages before the change <img width="1165" alt="image" src="https://github.com/user-attachments/assets/a9ad85fb-81ce-419c-95e5-612639905c66" /> DAP message after the change - report zero threads after attaching <img width="1165" alt="image" src="https://github.com/user-attachments/assets/a1179e18-6844-437a-938c-0383702294cd" /> --------- Co-authored-by: Jonas Devlieghere <jonas@devlieghere.com>