<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/133904>133904</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lldb] [Windows] Lldb-dap crashes when trying to step over breakpoint
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ktraunmueller
</td>
</tr>
</table>
<pre>
I have a [swift-winrt](https://github.com/thebrowsercompany/swift-winrt) based Windows desktop app.
Debugging works fine in the app executable, but when trying to step over (some, not all) breakpoints in other modules (see `Package.swift` below), the debugger crashes (reproducibly every time) with
```
Assertion failed: Out.empty(), file D:\r\_work\swift-build\swift-build\SourceCache\llvm-project\llvm\lib\Support\ConvertUTFWrapper.cpp, line 85
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: E:\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin\\lldb-dap.exe
Exception Code: 0x80000003
#0 0x00007ff7caa94b10 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x64b10)
#1 0x00007ffb5b47b030 (C:\WINDOWS\System32\ucrtbase.dll+0x7b030)
#2 0x00007ffb5b47bc3c (C:\WINDOWS\System32\ucrtbase.dll+0x7bc3c)
#3 0x00007ffb5b47d5d4 (C:\WINDOWS\System32\ucrtbase.dll+0x7d5d4)
#4 0x00007ffb5b47cbe0 (C:\WINDOWS\System32\ucrtbase.dll+0x7cbe0)
#5 0x00007ffb5b47d70c (C:\WINDOWS\System32\ucrtbase.dll+0x7d70c)
#6 0x00007ffa86d13628 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\liblldb.dll+0xcd3628)
#7 0x00007ffa86a94108 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\liblldb.dll+0xa54108)
#8 0x00007ffa862fc978 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\liblldb.dll+0x2bc978)
#9 0x00007ff7caa6bfa0 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x3bfa0)
#10 0x00007ff7caa520bc (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x220bc)
#11 0x00007ff7caa5be08 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x2be08)
#12 0x00007ff7caa5c220 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x2c220)
#13 0x00007ff7caa55240 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x25240)
#14 0x00007ff7caaa84e4 (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x784e4)
#15 0x00007ff7caaa857c (E:\Swift\Toolchains\0.0.0+Asserts\usr\bin\lldb-dap.exe+0x7857c)
#16 0x00007ffb5d4a8740 (C:\WINDOWS\System32\KERNEL32.DLL+0x8740)
#17 0x00007ffb600d0eb4 (C:\WINDOWS\SYSTEM32\ntdll.dll+0xd0eb4)
```
`lldb` command-line debugging is mostly working fine, so it looks this is an issue in the toolchain's `lldb-dap` debug adapter, not some general problem with my debugger setup.
Unfortunately I haven't found more clues on how to reproduce or narrow this down. I also can't share the source code, and I don't have a minimal reproducing example :(
Environment:
- Windows 11 arm64
- I also tested on an x64 machine (same Swift toolchain version), and it was exactly the same crash as on arm64.
- VS Code with swiftlang.swift-vscode Version 2.0.2
- current [TBC Swift toolchain](https://github.com/thebrowsercompany/swift-build/releases/tag/20250310.3)
I was [searching for code in LLVM](https://github.com/search?q=repo%3Allvm%2Fllvm-project%20convertUTF16ToUTF8String&type=code) that calls the assertion-throwing `convertUTF16ToUTF8String()` function in `ConvertUTFWrapper.cpp`
```
Assertion failed: Out.empty(), file D:\r\_work\swift-build\swift-build\SourceCache\llvm-project\llvm\lib\Support\ConvertUTFWrapper.cpp, line 85
```
and found [this candidate](https://github.com/llvm/llvm-project/blob/b01e5b23dd880e9686cc4151c7d1b1737cbdd98e/lldb/source/Plugins/Process/Windows/Common/TargetThreadWindows.cpp#L195), where `m_name` may be the `std::string` that is expected to be empty (but is not) when `convertUTF16ToUTF8String()` is called:
```cpp
llvm::convertUTF16ToUTF8String(
llvm::ArrayRef(reinterpret_cast<char *>(pszThreadName),
wcslen(pszThreadName) * sizeof(wchar_t)),
m_name);
```
Maybe a simple
```
m_name = "";
```
before the call to `convertUTF16ToUTF8String()` would fix the problem.
<details>
<summary>The app's Package.swift</summary>
```
// swift-tools-version: 6.2
import PackageDescription
let GUILinkerSettings: [LinkerSetting] = [
.unsafeFlags(["-Xlinker", "/SUBSYSTEM:WINDOWS"], .when(configuration: .release)),
// Update the entry point to point to the generated swift function, this lets us keep the same main method
// for debug/release
.unsafeFlags(["-Xlinker", "/ENTRY:mainCRTStartup"], .when(configuration: .release)),
]
let package = Package(
name: "Compositor-Windows",
products: [
.executable(
name: "Compositor",
targets: ["Compositor"]),
],
dependencies: [
// .package(url: "https://github.com/ktraunmueller/swift-cwinrt", branch: "main"),
// .package(url: "https://github.com/ktraunmueller/swift-uwp", branch: "main"),
// .package(url: "https://github.com/ktraunmueller/swift-windowsfoundation", branch: "main"),
// .package(url: "https://github.com/ktraunmueller/swift-windowsappsdk", branch: "main"),
// .package(url: "https://github.com/ktraunmueller/swift-winui", branch: "main"),
// .package(url: "https://github.com/ktraunmueller/swift-plugins", branch: "main")
.package(path: "../../../winrt/swift-cwinrt"),
.package(path: "../../../winrt/swift-uwp"),
.package(path: "../../../winrt/swift-win2d"),
.package(path: "../../../winrt/swift-windowsappsdk"),
.package(path: "../../../winrt/swift-windowsfoundation"),
.package(path: "../../../winrt/swift-winui"),
.package(path: "../Core")
],
targets: [
.executableTarget(
name: "Compositor",
dependencies: [
.product(name: "CompositorCore", package: "Core"),
.product(name: "CWinRT", package: "swift-cwinrt"),
.product(name: "UWP", package: "swift-uwp"),
.product(name: "Win2D", package: "swift-win2d"),
.product(name: "WinAppSDK", package: "swift-windowsappsdk"),
.product(name: "WindowsFoundation", package: "swift-windowsfoundation"),
.product(name: "WinUI", package: "swift-winui"),
],
swiftSettings: [.interoperabilityMode(.Cxx)],
linkerSettings: GUILinkerSettings
),
],
swiftLanguageModes: [.v5]
)
```
</details>
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUWV1z4jgW_TXKiyouI2M-HvJAIGylJt3T1Uk6O09dsnwBbWTJK8khzK_fupLBQBK6J53dqaW6Ohh8z7m6Xzoy3Dm51AAXJL8k-eyMN35l7MWjt7zRVQNKgT0rTLm5uKYr_gSUU5JfurVc-PO11NaTfEbYaOV97Ug2IWxO2Hwp_aopEmEqwuZ-BYU1awdWmKrmekPYfN-ejWnBHZT0QerSrB0twT16U1Ne1wlJJySdzKBolkupl3Rt7KOjC6mBSk39CvAuCs8gGs8LBYRNadF4ul6Bpt5u0MYb6jzU1DyBpYSNnKnCfdp4ypUKDljgj7WR2jvENX4FllambBS4YAJAySD9wsUjX0IS3CeDlBagzJqwMcKhM2VwFCwVlrtVtLVQW1M2QhZqQ-EJ7IZ6iR6M6Vr6VVwhGaTtv3QycQ6sl0bTBZcKSpJN6O-NT6Cq_YawUcu3kAroDGOeTy3Jp98xNiSfxtgWjVTli6tb01gBUy5WQPKpUk_VeW3Nv0D49hL_yALvbOraYHanU6OfwPr7u_mD5XUNNhF1jQ4ozMIoJ-nky83V5PaKuqaopKecFs2SWkB7DP6J2giU8c_OETaXzjXgCJtTrksqtVBNCSG-Iay04ALrUwCWx63n4pGWTVUjRTpJE5KOv1iztLyi3C6bCrRHenoVY4WLC_kLb--MUWLFpXbxOk3SJCXsMiah_bBxNr4ppI5vlCqL85LXCTwDSSdXzwLqkLKpKQHJ0udRGl4ZSSeUsCyl6TNeDxeLoeB83C96KZZH69XWpQN_XjoTPYluHPjALtPnAWJidUTGXsdY5EV_WKRZYJxGxofrz7PfH26Re-M8VBlDfGE9dmNSYmNcps_BqsNkx5giE-_AFJnoMLMjzDIv-38dE606zP4RpijgHWtHqw4zP_ZzmL5j7WjVYQ46TD4alL1swEa_WBWywMLYEYoSMTvG4QEjH_d76Qcz8hwxO8bRASNbiPHwgxlZgZgd4_iw1wbFgn90r2WIGRmx1Y66O2dpIT6YkSFmx9g7Yizgl_P4ghExO0Z2xCgY--ioMsTsGLMjxpz1P5wRMTvG_iEjH_Wh_8GMQ8TsGPNjxnz40ZUzRMyOcbA_x8o-Hw37P5yNv119_Xx1k7FkdnMTMNGog9wbKsUgTcsUijdG-B-3d1efAqT2pVK7Fg4mLeCeFoqXuCKUW8JUFdfleVAe5U4USkcr47zaBHmIn6BARIniDJWeKmMeHfUr6fBWrmkQGFsB6beRJWzoaMuG8UPGQEJ5yWsPdisaUUDSJWiwXNHamkJBFbQcrTadBHTgm62AvdcLY32juQe1oVFJI5-nC9PoklbGAhWqAUeNpiuzRt20FY5AjaWaW4sf4yJKs9YJvaZcOUMFj0BuxW0USS6IPCpQibBp0FDXtDTxtlbDV1LLiqsdBwYNnnlVK6BBqo2i41f6SVqjUUNFeXW-k-m9HuW2GvRx5tLzrTsenIcSV8E1fR70acXFCtOFKppXQENBd0GnT2CdROfGW2elp2vu0B2BOQ1LQsso_ngIUWBOgj_fboPoigkIcldxvYwa_fzJYRjot0hCWZImLFiJxlrQHg8zd5fTY69-4VATpTabW1DAXZCxni8Jm7OU5WnWS5OsLfN0ch0Wiucp4BbDtKQLY0PmsDpvbr59-qEn0ZRk83-TbIaim7A8m0RhnR9L65ylYifne4M7c383H916K_WSsIHf1ECyWSycMfUr7qngSrl40NoeS879ypo1OksGJ-DCzjFI6aLRIkhjqdHg9ePEXrP_H5-DjiYXFnPsb5Jfhs4VXJey5B5-mNbXT0aFMgX-SXuQFywry9EohfFgNBCi38t7Ylj2it4wG4qiLMcjCAAlWsSZQNj8i2qWuImw-RdrBDh813Y0YfOpqSrsxfkdt0vwdysLvGy_jsvNbnrjvI38egU2nIur75pXgMmu-IYWcQyRQeo8Jo1kExdrYpDGopLY3TUInBTeoEHIKc4IPLxLh2M2HJDxGP9TVRaCq9oq2U8Fep3GfgiunIJKJ7S7cWIt33yFRTjCS-3B1hb8d8GdJ9lUrLilhE1IdkXYqHZ_xlh95uFkT9gUwdbCKZzzL75HS-rkn2AQfo1g332w25q2rzaybEyyy5cF9olvCpzmTuLgPvo-mlKSzShhDP-9gChgYdpNA4OHufipYK9No0q6kM_BtN0B262OZNMSPJfKYWjCtWuqitsNya7u4gObsNMePkzJpliluxtfToPYI3HAn-OgdufbrSOb0EEY6ySdyCo8dmjBZ-CEleFkHr9W4Ok_7q9vpH4EewveS70MDwdIfnnwIclnMXT5ZZuOpNGOL2Cu-NJhKPJLwtj5P1WwChGexkDPb-8vo84h2WQrfRgLLT-lCdY0YSNh9EIuG8t9u4Sk3TGOy6Bd-H2NcyMEHLS3GxoeV2HKdm_wuyhLsLFCpHbTNz6hko4q8I42jj4C1N3eWuFWXIFfmfKQFvejIGm6Le0vx-Pq893XP0g2QZLp17tbz61v6neGBG12qaxjmkOm2pS3fUwpDZ2DqWVsaqraOOmNPd8NO9aFOGogvy0E_DTZf6Y42uvIN5EPELcvH-boDvj4flz_fqpDPNqLEmrQJWghYd-x9tWmJ6l3q26san06sa0cPNfdaRbRPokNOSss1ygoAlQVdDHrvPxQ3mZd_xTpf2PN61gHYX-OBfc3e8Lr2pWPf6cXjfzfl0C91SMnibs177HW3G9vTRLC5t1_bTm_rO7tEt6Bsq3Voxy8A2ktNSs_Duuodj4M86gzPgS3rbCfx5oaC10NHMzHo9G6B9eN7ihjf2WAn57C3QriDkLY6FXo3TKm2y1rd8tufS-oTwA_SP317lXAN0v-p4DvH76cQH2jBU5DPkjNZidA3-yGH8JO6vp29ttp6NPN8UMKNJ8f7xAnqN7omTfx769PY77eL_RAKoSbj6RsEs4rpgbLC6mk33wKZ_pRMn1-RridsXohhF-q4_0N51WxEjy44XrZ8CUg086Np7yVay8f7AXB350UzsqLrBxnY34GF71hP8t7vZTlZ6uL_lDwLB8UKS_6o1HBBU_zXjFeDMYjDqNhcSYvwpOVftrrsWyY9pNBXrIUMsH5mGf5Iif9FCouVYJnu8TY5Vl4_nfRy7Jx2j9TvADltr9_24tw5C6apSP9VEnnXWfnpVfhl_Jwqs7D6WCrJ_MZvWkfHO5-_X3zV-ju9-azxqqL9_9C2q7h6YL9JwAA___Pgo7Q">