VSCode 调试出现:“launch: program ...... does not exist”

​如题,尝试很多方法无法成功解决,最终把改成一坨的launch.json和task.json(附vscode 打开 task.json的方法vscode `打开tasks.json的方法)丢给DS。

1. tasks.json 的问题

我的代码

task.json:

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "compile",
			"command": "D:/TDM-GCC-64/bin/gcc.exe",
			"args": [
				"-fdiagnostics-color=always",
				"-g",
				"${file}",
				"-o",
				"${fileDirname}\\${fileBasenameNoExtension}.exe",
				""
			],
			"options": {
				"cwd": "D:/TDM-GCC-64/bin"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"detail": "编译器: D:/TDM-GCC-64/bin/gcc.exe"
		}
	]
}

DS的回复:

问题 1:args 中的空字符串

  • 在 args 数组中,最后一个元素是空字符串 “”,这可能会导致编译命令无效。

    • 解决方法:删除空字符串。

问题 2:options.cwd 的设置

你将 cwd 设置为 D:/TDM-GCC-64/bin,这意味着编译命令会在该目录下运行。

如果你的源代码不在这个目录下,可能会导致找不到文件。

  • 解决方法:将 cwd 设置为 ${fileDirname}${workspaceFolder},以确保编译命令在正确的目录下运行。

问题 3:路径分隔符

在 Windows 上,路径分隔符可以是 / 或 \。为了跨平台兼容性,建议使用 /。

修改后的 tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "compile",
            "command": "D:/TDM-GCC-64/bin/gcc.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"  // 设置为当前文件目录
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "编译器: D:/TDM-GCC-64/bin/gcc.exe"
        }
    ]
}

2. launch.json 的问题

我的代码

launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++ Runner: Debug Session",
      "type": "cppdbg",
      "request": "launch",
      "args": [],
      "stopAtEntry": false,
      "externalConsole": true,
      "cwd": "d:/aThreeDown/cryptology/hw3",
      "program": "{fileDirname}\\${fileBasenameNoExtension}",
      "MIMode": "gdb",
      "miDebuggerPath": "gdb",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}

DS的回复:

问题 1:program 路径错误

你的 program 字段写的是 {fileDirname}\\${fileBasenameNoExtension},但 {fileDirname}缺少 $符号。

  • 解决方法:将 {fileDirname} 改为 ${fileDirname}

问题 2:program 路径缺少 .exe 扩展名

在 Windows 上,可执行文件通常需要 .exe 扩展名。

  • 解决方法:将 program 改为 ${fileDirname}/${fileBasenameNoExtension}.exe

问题 3:miDebuggerPath 的设置

你直接将 miDebuggerPath 设置为 gdb,这要求 gdb 在系统的环境变量中。

如果 gdb 不在环境变量中,调试器会找不到。

  • 解决方法:指定 gdb 的完整路径,例如 D:/TDM-GCC-64/bin/gdb.exe

问题 4:cwd 的设置

你将 cwd 设置为 d:/aThreeDown/cryptology/hw3,这是一个硬编码路径。

如果项目路径变化,会导致调试失败。

  • 解决方法:将 cwd 设置为 ${fileDirname}${workspaceFolder}

修改后的 launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++ Runner: Debug Session",
            "type": "cppdbg",
            "request": "launch",
            "args": [],
            "stopAtEntry": false,
            "externalConsole": true,
            "cwd": "${fileDirname}",  // 设置为当前文件目录
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe",  // 添加 .exe 扩展名
            "MIMode": "gdb",
            "miDebuggerPath": "D:/TDM-GCC-64/bin/gdb.exe",  // 指定 gdb 的完整路径
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "compile"  // 添加 preLaunchTask,确保调试前运行编译任务
        }
    ]
}

我的总结

  • cwd 是 Current Working Directory(当前工作目录)的缩写,表示命令运行的目录。在 VSCode 的 tasks.json 和 launch.json 中,cwd 用于指定任务或调试器运行时的当前工作目录。
  • ${fileDirname} 是 VSCode 的预定义变量,表示当前打开文件的目录路径。在我原本的配置文件中,有好几处关于cwd的地址错误,漏掉$符号和将地址写死都是不对的
  • program后面的参数代表可运行文件,在windows中要加后缀名.exe,我参考的有些博客可能由于在linux上运行而不加。
  • args如果确实没有参数应该写"args": []
  • task.json里面label的值是我照着网上的博客抄的,现在看起来好像没什么问题,以后不知道会不会有问题。label 是 tasks.json 中每个任务的必填字段。如果删除 label,VSCode 会报错,任务将无法运行。每个任务的 label 必须是唯一的,不能重复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值