最近使用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 )