«CString не прекращена» при использовании LLDB-MI с кодом Visual Studio в Windows ARM64

Недавно я перешел на машину 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)

Среда:

  • Версия кода Visual Studio: 1.91.0 (настройка пользователя)
  • Версия Clang: 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff
  • Версия LLVM: 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff

Есть идеи, чего мне не хватает?

Обновление на основе предложения 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: """
CMAKE_CURRENT_SOURCE_DIR в вашем add_executable, вероятно, лишнее
starball 12.07.2024 09:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема, с которой вы столкнулись с 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.

Спасибо за ваше предложение, но, к сожалению, оно не дало никакого эффекта. Мы будем очень признательны за любые другие предложения, которые могут у вас возникнуть.

fishkopf 11.07.2024 20:49
Ответ принят как подходящий

Я вроде решил проблему, хотя мне не удалось найти решение исходной проблемы, я узнал о 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}",

        }
      ]
   }

Спасибо всем, кто пытался помочь.

Другие вопросы по теме