Недавно я перешел на машину ARM64 с Snapdragon X Elite в Windows и пытаюсь настроить код Visual Studio. Поскольку MinGW-w64 с gcc и gdb недоступен для ARM64, я использую LLVM-Mingw (версия 18.1.18). (Я также пробовал MSVC, но никак не могу к нему привыкнуть).
Проблема возникает, когда я пытаюсь запустить lldb-mi из VS Code. Я столкнулся со следующей ошибкой (полный вывод внизу вопроса):
[Error] MI parsing error: CString not terminated: ""C:\\Users\\User_\\Documents\\Development\\TestProject"
[Error] MI parsing error: Result expected: "path = "C:\\Users\\User_\\Documents\\Development\\TestProject"
[Error] MI parsing error: trailing chars: ""C:\\Users\\User_\\Documents\\Development\\TestProject"
Конфигурация запуска (launch.json):
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"showDisplayString": true,
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"logging": {
"engineLogging": true
},
"externalConsole": true,
"MIMode": "lldb"
}
]
}
Отладка с использованием только lldb напрямую через CLI работает нормально. Я также попробовал расширение кода vs CodeLLDB, но, к сожалению, оно пока недоступно для ARM64.
Для тех, кто хочет воспроизвести проблему. Код представляет собой простую программу Hello World на C++ и используемом CMake:
cmake_minimum_required(VERSION 3.27)
project(TestProject)
set(CMAKE_BUILD_TYPE Debug)
add_executable(testProject ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
target_link_libraries( testProject)
Среда:
Есть идеи, чего мне не хватает?
Обновление на основе предложения Electro Organic:
Я обновил файл launch.json, указав абсолютный путь. Я также перемещаю его в путь без подчеркивания, та же проблема сохраняется. Я также попробовал прямую и двойную обратную косую черту, без изменений. Я проверил с помощью Notepad++ наличие скрытых символов, но тоже не смог их найти.
Новый запуск.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "C:\\Users\\Public\\TestProject\\build\\testProject.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:\\Users\\Public\\TestProject",
"logging": {
"engineLogging": true
},
"externalConsole": false,
"MIMode": "lldb",
"miDebuggerPath": "C:\\BuildTools\\llvm-mingw-20240619-ucrt-aarch64\\bin\\lldb-mi.exe"
}
]
}
Полный вывод отладки:
1: (80) LaunchOptions{"name":"(lldb) Launch","type":"cppdbg","request":"launch","program":"C:\\Users\\User_\\Documents\\Development\\TestProject\\build\\testProject.exe","showDisplayString":true,"args":[],"stopAtEntry":false,"cwd":"C:\\Users\\User_\\Documents\\Development\\TestProject","logging":{"engineLogging":true},"externalConsole":true,"MIMode":"lldb","__configurationTarget":6,"__sessionId":"b05ff7d2-9d7c-4e88-96b2-79ee5c80f421","miDebuggerPath":null}
1: (131) Starting: "C:\BuildTools\llvm-mingw-20240619-ucrt-aarch64\bin\lldb-mi.exe" --interpreter=mi
1: (201) DebuggerPid=21952
1: (806) ->(gdb)
1: (816) <-1001-gdb-set auto-solib-add on
1: (816) ->1001^done
1: (817) ->(gdb)
1: (819) 1001: elapsed time 3
1: (820) <-1002-gdb-set solib-search-path "C:\\Users\\User_\\Documents\\Development\\TestProject\\build;"
1: (821) ->1002^done
1: (821) 1002: elapsed time 1
1: (821) <-1003-environment-cd C:\\Users\\User_\\Documents\\Development\\TestProject
1: (821) ->(gdb)
1: (821) ->1003^done,path = "C:\\Users\\User_\\Documents\\Development\\TestProject
1: (821) ->"
1: (821) ->(gdb)
[Error] 1: (825) MI parsing error: CString not terminated: ""C:\\Users\\User_\\Documents\\Development\\TestProject"
[Error] 1: (825) MI parsing error: Result expected: "path = "C:\\Users\\User_\\Documents\\Development\\TestProject"
[Error] 1: (825) MI parsing error: trailing chars: ""C:\\Users\\User_\\Documents\\Development\\TestProject"
[Error] 1: (894) EXCEPTION:
[Error] 1: (895) EXCEPTION: at MICore.MIResults.ParseResultList(Span listStr, ResultClass resultClass)
[Error] 1: (895) EXCEPTION: at MICore.MIResults.ParseCommandOutput(String output)
[Error] 1: (895) EXCEPTION: at MICore.Debugger.ProcessStdOutLine(String line)
[Error] 1: (895) EXCEPTION: at Microsoft.MIDebugEngine.DebuggedProcess.<>c__DisplayClass96_0.<ScheduleStdOutProcessing>b__0()
[Error] 1: (895) EXCEPTION: at Microsoft.MIDebugEngine.WorkerThread.ThreadFunc()
1: (897) Send Event AD7MessageEvent
[Error] 1: (898) MI parsing error: CString not terminated: """
Проблема, с которой вы столкнулись с LLDB-MI в VS Code, по-видимому, связана с тем, как обрабатываются и анализируются пути.
Убедитесь, что пути и аргументы правильно указаны в файле launch.json. Иногда экранирующие символы или неправильные указания пути могут привести к ошибкам синтаксического анализа.
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"logging": {
"engineLogging": true
},
"externalConsole": false,
"MIMode": "lldb",
"miDebuggerPath": "C:\\BuildTools\\llvm-mingw-20240619-ucrt-aarch64\\bin\\lldb-mi.exe"
}
]
}
Если проблема не устранена, вы можете попробовать явно указать рабочий каталог (cwd) и другие пути, чтобы избежать потенциальных проблем с экранированием или форматированием. Иногда относительные пути могут помочь избежать проблем с обратной косой чертой в путях Windows.
Спасибо за ваше предложение, но, к сожалению, оно не дало никакого эффекта. Мы будем очень признательны за любые другие предложения, которые могут у вас возникнуть.
Я вроде решил проблему, хотя мне не удалось найти решение исходной проблемы, я узнал о lldb-dap (ранее lldb-vscode) в ходе исследований. lldb-dap также позволяет выполнять отладку с использованием vs-кода, но через другой интерфейс. Это помогает мне иметь возможность отлаживать использование vs-кода.
Мне нужно было установить расширение lldb-dap, и это мой файл launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "lldb-dap",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"args": [],
"cwd": "${workspaceFolder}",
}
]
}
Спасибо всем, кто пытался помочь.
CMAKE_CURRENT_SOURCE_DIR
в вашемadd_executable
, вероятно, лишнее