c++ - VSCode C++插件在调试文件名中包含汉字的文件时损坏
问题描述
从github 问题移动以找到解决方法。详情如下。感谢帮助。
- 操作系统和版本:Windows 10 1803
- VS 代码版本:1.26.1
- C/C++ 扩展版本:0.18.1
其他扩展:Clang-Format、Code Runner 和一些主题。禁用它们并且问题仍然存在
错误:调试调试器时通知“无法打开文件”。文件名中的汉字变成无意义的数字。示例:“test 测试.cpp”(原始)/“test 262342312324.cpp”(之后)
完整的错误信息:
无法打开“test 262342312324.cpp”:找不到文件(file:///c:/Users/me/Documents/C++ Code/test 262342312324.cpp)。</p>
- 翻译:can't open "test ..... .cpp": file not found (.../test .....cpp)
重现
重现行为的步骤:(下面的相关文件)
创建一个文件并用中文或任何其他符号命名,并添加一个断点。
按 F5 开始调试。
出现错误信息。
启动.json
{
"version": "0.2.0",
"configurations": [
{
"name": "G++",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\MinGW\bin\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
],
"preLaunchTask": "Compile",
"logging": {
"engineLogging": true,
"trace": true,
"traceResponse": true
}
}
]
}
任务.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Compile",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-std=c++11",
"-finput-charset=utf-8",
"-fexec-charset=gbk"
],
"problemMatcher": "$gcc",
},
]
}
解决方案
正如我在 GitHub 问题中提到的,这是 gdb 的 MI 解释器无法正确处理中文字符的问题。正如@jesper_juhl 提到的,解决方法是在路径中只包含ASCII 字符。
推荐阅读
- python - 如何使用具有多个类的 selenium 通过登录
- java - 没有解释器的 Java Python
- python - 如何根据 3 个列表从特定索引中打印输出(所有 3 个列表中的相同位置)
- python - Python - 根据特定字符串对数据框进行分组
- c++ - 将“this”指针传递给 SetWindowsHookEx 的 MouseProc
- javascript - 鼠标抬起后如何停止“mousemove”事件?
- java - 在 spring.io 项目中将字符串附加到 collectors.joining 函数
- php - 是否可以从视图发送 cakephp 电子邮件
- .htaccess - Htaccess 重写代码给出页面未找到错误
- codenameone - 从 Lightweight Picker 中移除向上向下箭头