Windows 10 的 Unicode新特性致使 VS Code 沒法debug gdb

由於須要在Windows下調試一個基於C語言的開源工具,調試環境爲VS Code、Microsoft C/C++ Extension、GCC和GDB環境(Mingw-w64)。json

按照VS Code官方文檔Using Mingw-w64 in VS Code一步一步搭建好調試環境,編譯很順利經過了。async

可是調試的時候出問題了。在VS Code中按F5啓動Debug,VS的終端(Terminal)中輸出了一段命令:c:\Users\efrey\.vscode\extensions\ms-vscode.cpptools-0.25.0\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-gkkeppw1.hde --stdout=Microsoft-MIEngine-Out-frcxsnxq.e4y --stderr=Microsoft-MIEngine-Error-htrolgld.kn1 --pid=Microsoft-MIEngine-Pid-mjgquuhh.yua --dbgExe=C:/mingw-w64/mingw64/bin/gdb.exe --interpreter=mi,而後就一直停在那裏了,VS Code的Debug視圖左上角也一直在顯示正在加載的滾動進度條。
此時除了終端窗口(Terminal)無響應,輸出(Output)、調試控制檯(Debug Console)也沒有任何信息。工具

停掉調試器,在VS Code中配置開啓日誌,即將"logging": { "engineLogging": true },加入到launch.json文件,配置後文件以下:測試

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/mingw-w64/mingw64/bin/gdb.exe",
            "logging": { "engineLogging": true },
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

重啓按下F5啓動調試,終端窗口仍是和以前同樣,停在那裏。不過在調試控制檯裏能夠看到調試啓動的日誌了,發現其中有一段提示錯誤的信息:"\357\273\2771001-gdb-set target-async onUndefined command: \"\357\"spa

DEBUG CONSOLE
1: (119) LaunchOptions  MIMode='gdb'
1: (119) LaunchOptions  MIDebuggerPath='C:/mingw-w64/mingw64/bin/gdb.exe'
...
1: (496) ->(gdb)
1: (500) <-1001-gdb-set target-async on
1: (500) ->&"\357\273\2771001-gdb-set target-async on\n"
1: (500) ->&"Undefined command: \"\357\".  Try \"help\".\n"
1: (500) ->^error,msg="Undefined command: \"\357\".  Try \"help\"."
...

未定義的命令中的357看起來像是Unicode字符集的格式,致使了gdb沒法識別所以報錯。想起了本身好像在更改系統區域設置中開啓了一個測試版的Unicode UTF8的特性支持。debug

控制面板中依次進入時鐘和區域>區域,點擊更改位置,而後切換到管理頁,進入更改系統區域設置,而後取消勾選Beta版:使用Unicode UTF8提供全球語言支持(U)複選框。
重啓電腦後,打開VS Code,按下F5,調試器正常的運行並停在源文件的斷點位置了。調試

相關文章
相關標籤/搜索