VS Code通过gdb调试时无法找到helloworld.cpp的问题求助
问题:VS Code + Cygwin GDB 调试路径异常导致断点失效
- 按照微软官方VS Code C++ HelloWorld示例操作,使用Cygwin g++可正常编译运行程序,但通过GDB调试时断点无法触发
- 在
launch.json中设置"stopAtEntry": true后,程序能停住,但点击main()栈帧时提示找不到helloworld.cpp文件;报错显示的路径包含高位ASCII字符,格式为C:>cygwin\bin\C☐>Users>lehrian>Documents>CProjects>HelloWorld>helloworld.cpp - 尝试通过
sourceFileMap将C:\cygwin\bin映射到\cygdrive,仅能修正路径中C☐>Users>...左侧的部分,核心问题似乎是VS Code试图使用Windows完整路径,而GDB无法正确解析其中的c:\部分 - 相同代码在Linux环境下可正常调试,现寻求解决方案,同时想确认是否有其他用户能复现该问题
附配置文件
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}/helloworld.exe", "args": [], "stopAtEntry": true, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "c:/cygwin/bin/gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set Disassembly Flavor to Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ] } ] }
tasks.json
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "C:\\cygwin\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ], "version": "2.0.0" }
调试日志补充
查看调试日志发现路径拼接异常:
--> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (1655) ->1023^done,stack=[frame={=\"0\",addr=\"0x000000010040108d\",func=\"main\",file=\"C:\\Users\\lehrian\\Documents\\CProjects\\HelloWorld\\helloworld.cpp\",fullname=\"/cygdrive/c/Users/lehrian/Documents/CProjects/HelloWorld/C:\\Users\\lehrian\\Documents\\CProjects\\HelloWorld\\helloworld.cpp\",line=\"5\",arch=\"i386:x86-64\"}]\r\n"},"seq":709} 1: (1655) ->1023^done,stack=[frame={level="0",addr="0x000000010040108d",func="main",file="C:\Users\lehrian\Documents\CProjects\HelloWorld\helloworld.cpp",fullname="/cygdrive/c/Users/lehrian/Documents/CProjects/HelloWorld/C:\Users\lehrian\Documents\CProjects\HelloWorld\helloworld.cpp",line="5",arch="i386:x86-64"}] --> E (output): {"type":"event","event":"output","body":{"category":"console","output":"1: (1655) ->(gdb)\r\n"},"seq":711} 1: (1655) ->(gdb)
可见fullname字段同时包含Cygwin路径和Windows路径,正确格式应为仅使用Cygwin路径(如/cygdrive/c/Users/lehrian/.../helloworld.cpp),请问是否有VS Code偏好设置或调试配置选项可以指定路径格式?
内容的提问来源于stack exchange,提问作者Lehrian
相关产品推荐
相关产品推荐

