最近使用vscode编写Cpp程序,遇到调试问题,这里记录一下。

在vscode下使用快捷键ctrl+shift+p 进行配置,会自动生成launch.json 和tasks.json 两个文件。

选择下面会生成 tasks.json

 

如下可以生成对应的c_cpp_properties.json配置文件,可以设置头文件

 

 

 

默认情况下调试运行VS Code会帮我们生成launch.json和tasks.json文件。但是这两个文件有些地方需要我们手动配置和修改,不然会有错误。

launch.json文件主要修改program和preLaunchTask两处地方。如下图所示。program用于配置可执行文件的绝对路径,这里t3s是在CMakeLists.txt里面配置好的。preLaunchTask用于与tasks.json文件中tasks中一一对应的task映射(从名字可以知道先于执行前进行的任务操作preLaunchTask)。注意这里的miMode 要配置成本地有的调试器,默认clang++使用的是lldb调试器,而我本地服务器没装,所以这里我手动设置为了gdb调试器。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "clang++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/t3s",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            // "MIMode": "lldb",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

tasks.json文件主要设置 build的构建过程,这里统一采用cmake推荐的外部构建,在build目录下进行构建。这里的最后的task的label要与preLaunchTask中的名称要对应,都是Build。

 这里贴出tasks.json文件内容。

{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"
    },
    "tasks": [
        {
            "type": "shell",
            "label": "cmake",
            "command": "cmake",
            "args" : [
                ".."
            ]
        },
        {
            "label": "make",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "command": "make",
            "args": [

            ]
        },
        {
            "label": "Build",
            "dependsOrder": "sequence", //按列出的顺序执行任务依赖项
            "dependsOn":[
                "cmake",
                "make"
            ]
        }
    ]
}

这里也贴上我的CMakeLists.txt内容

cmake_minimum_required(VERSION 2.8.12)

set(CMAKE_C_COMPILER "clang")
set(CMAKE_CXX_COMPILER "clang++")
set(CMAKE_CXX_STANDARD 17)

project(oneDNN-example)

set(DPCPP_HOME "/home/wzy/sycl_workspace")
set(DNN_HOME "${DPCPP_HOME}/oneDNN-cuda-debug")

message(STATUS "dpcpp_home : "${DPCPP_HOME})
message(STATUS "dnn_home : "${DNN_HOME})

include_directories("${DPCPP_HOME}/llvm/build-cuda-debug/include/sycl")
include_directories("${DPCPP_HOME}/llvm/build-cuda-debug/include")
include_directories("${DNN_HOME}/include")

link_directories("${DPCPP_HOME}/llvm/build-cuda-debug/lib")
link_directories("${DNN_HOME}/lib")


#set(CMAKE_INSTALL_RPATH "${DPCPP_HOME}/llvm/build-cuda-debug/lib" "${DNN_HOME}/lib")


set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb -std=c++17")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall -std=c++17")

aux_source_directory(. DIR_SRCS)
add_executable(t3s ${DIR_SRCS})
target_link_libraries(t3s -lsycl -ldnnl )

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐