当前位置: 首页 > 知识库问答 >
问题:

如何在Visual Studio代码中调试之前自动运行生成任务?

苏德容
2023-03-14

在VS Code中,我必须先运行构建任务,然后开始调试,而在CLion中,我只需单击调试,然后在必要时自动构建并开始调试。在VS Code中也有自动化的方法吗?

共有2个答案

谭玉泽
2023-03-14

我花了一些时间才明白这个公认的答案。从这个解释中,我不清楚我的程序是如何构建和调试的。我还在Windows中使用Mingw-w64。按照此链接上的说明,并根据已接受的答案,我创建了以下文件:

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": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            
            "preLaunchTask": "build"
        }
    ]
}

任务。json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "build",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compiler: C:\\msys64\\mingw64\\bin\\g++.exe"
        }
    ]
}

关键是在任务中重命名默认的标签”:“C/C:g.exe生成活动文件”。json,例如,我使用了单词“build”,后来在“preLaunchTask”中引用了同一个单词(不是tasks.json的路径或链接):“build”“inside launch”。json。

请注意,重命名并不是绝对必要的。您还可以在启动内部说“preLaunchTask”:“C/C:g.exe构建活动文件”。json,它也会起作用。

司空俊悟
2023-03-14

您正在寻找的可能是如何将构建任务链接到调试配置。我将在下面尝试说明这个过程。

要访问构建配置,请转到侧面(1)的调试栏,然后按gear图标访问启动。json配置文件(2)。您需要在该启动中的配置下添加启动前任务。json文件,并将其链接到构建任务(3)。

然后,您需要通过使用ctrl-shift-b来设置构建任务。

如果它已经存在(正如你的帖子所暗示的),你可以在你的网站上找到它。任务中的vs代码文件夹。json文件。如果你打开任务。json文件,您将在列表中找到构建任务。你现在需要做的就是把这个任务的“标签”放在你的发布中。启动前配置中的json。

祝你好运

附录中添加了清洁构建和在共享启动前构建之后并行运行配置的示例。

问:如果构建任务失败,但上线过程从旧的二进制文件开始,该怎么办?

答:@JoKing给出的潜在解决方案:添加一个删除二进制文件的新任务,并在每次构建之前通过在构建任务中使用“dependsOn”选项来执行该任务。下面给出了它在任务中的外观示例。json文件,源代码

   "tasks": [
    {
      "taskName": "build",
      "command": "tsc",
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "dependsOn": [
        "build client",
        "build server"
      ]
    },
    {
      "taskName": "build client",
      "command": "tsc",
      "args": [
        "-w",
        "-p",
        "${workspaceRoot}/src/typescript/client"
      ]
    },
    {
      "taskName": "build server",
      "command": "tsc",
      "args": [
        "-w",
        "-p",
        "${workspaceRoot}/src/typescript/server"
      ]
    }
  ]

问:我有多个配置,但想在所有配置之前运行一次构建任务,可以吗?

答:我以前没有亲自设置过,但复合发射配置可能是您想要的。该页面中的示例有两种配置,“服务器”和“客户端”,它们可以在执行预启动任务(“defaultBuildTask”)时并行启动。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Server",
      "program": "${workspaceFolder}/server.js"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Client",
      "program": "${workspaceFolder}/client.js"
    }
  ],
  "compounds": [
    {
      "name": "Server/Client",
      "configurations": ["Server", "Client"],
      "preLaunchTask": "${defaultBuildTask}"
    }
  ]
}
 类似资料:
  • 我遵循以下指示https://code.visualstudio.com/docs/setup/mac但我没有成功。这就是我进去时发生的事情 我得到了以下信息: 我还查找了以下问题:如何在OSX上从命令行打开Visual Studio代码?,这没用。 我在VSCode中只有一个终端选项,zsh。

  • 问题内容: 我想为我编写的(纯粹是学术性的)玩具语言处理器编写一个非常小的概念验证JIT编译器,但是在中等高度的设计中遇到了一些麻烦。从概念上讲,我熟悉JIT的工作原理- 您将字节码编译为(机器或汇编语言)代码以运行。但是,从细节上讲,我不太 了解 您实际如何 执行 此操作。 我(非常“ newb”)下意识的反应,因为我没有从哪里开始的第一个线索,将尝试执行以下操作: mmap()一个内存块,设置

  • 问题内容: 我的Java应用程序开始定期崩溃,原因是SIGSEGV和堆栈数据转储以及文本文件中的信息负载。 我已经调试了gdb中的C程序,并且已经从我的IDE中调试了Java代码。我不确定如何在正在运行的Java程序中处理类似C的崩溃。 我假设我不在这里查看JVM错误。其他Java程序运行良好,Sun的JVM可能比我的代码更稳定。但是,我不知道如何用Java代码引起段错误。肯定有足够的可用内存,当

  • 我有一个通过JAXB完成从XSD到java代码生成的分级任务。但是代码生成需要一个手工的注释类(写在Kotlin上),放在项目的源目录中。在代码生成任务之前,我如何编译并放入类路径中一个这个文件? 在gradle项目中我有这样的台词: 所以在我作为param configurations.jaxb.aspath传递的代码生成任务中,我建议必须在这个类路径中包含已编译的类