使用命令行编译 cpp 项目 但是在 Vscode 中调试
Compiling cpp Project with command line But debugging in Vscode
我用命令行编译我的代码。这是我如何使用 2 个库 a 和 b
编译名为“out”的程序的示例
g++ -c -O3 -I../../include/boost_1_61_0 -std=c++14 -MMD -MP -MF "a.o.d" -o a.o ../../my_Library/lib_a.cpp
g++ -c -O3 -I../../include/boost_1_61_0 -std=c++14 -MMD -MP -MF "b.o.d" -o b.o ../../my_Library/lib_b.cpp
g++ -lcurl -g -std=c++11 -lpthread -o out a.o b.o -L../../include/shared_libraries -no-pie -lsqlite3 -lrt -lpthread -lcurl -fopenmp -lboost_serialization -lconfig++ -lpq -lstdc++ -lz -lboost_thread -lboost_system -lboost_program_options
最后,我得到了文件(.o 和 .od)- a、b、out
我想用Vscod调试一个cpp文件和b个cpp文件怎么办?
我知道我需要编辑 tasks.json 和 launch.json 但我不知道怎么做。
我使用 ubuntu。
谢谢
我用ubuntu.
谢谢
#################编辑###################
我按照 Krzysztof Mochocki 所说的做了。经过一些小改动后,它就可以工作了。
首先,我从编译行 (-O3) 中删除了优化标志
其次,我将-g(调试标志)添加到编译行。
g++ -c -g -I../../include/boost_1_61_0 -std=c++14 -MMD -MP -MF "a.o.d" -o a.o my_Librar/a.cpp
最后的更改是在 launch.json 字段“程序”中,我在那里写的是程序路径,而不是 .o 路径
"program": "my/path/a",
现在我可以使用 Vscode 进行调试了。
谢谢 Krzysztof Mochocki
配置示例如下:
{
"name": "(gdb) Launch my super program with 3 args",
"type": "cppdbg",
"request": "launch",
"program": "/home/user/build/my_program.o",
"args": ["arg1", "--arg-2", "arg_3"],
"stopAtEntry": false,
"cwd": "/home/user/build/workspace",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
正如我在您的编译命令中看到的那样,我担心它不是最佳的。尝试使用一些 cmake,因为您将添加更多文件,维护您的编译命令将更加困难。
此外,您的代码不可调试,因为您没有添加任何调试信息参数。如果你使用 cmake,它会在指定一个参数后自动添加它:CMAKE_BUILD_TYPE=Debug
,所以你的发布示例 cmake 看起来像:
cmake ../src
和调试:
cmake -DCMAKE_BUILD_TYPE=Debug ../src
我用命令行编译我的代码。这是我如何使用 2 个库 a 和 b
编译名为“out”的程序的示例g++ -c -O3 -I../../include/boost_1_61_0 -std=c++14 -MMD -MP -MF "a.o.d" -o a.o ../../my_Library/lib_a.cpp
g++ -c -O3 -I../../include/boost_1_61_0 -std=c++14 -MMD -MP -MF "b.o.d" -o b.o ../../my_Library/lib_b.cpp
g++ -lcurl -g -std=c++11 -lpthread -o out a.o b.o -L../../include/shared_libraries -no-pie -lsqlite3 -lrt -lpthread -lcurl -fopenmp -lboost_serialization -lconfig++ -lpq -lstdc++ -lz -lboost_thread -lboost_system -lboost_program_options
最后,我得到了文件(.o 和 .od)- a、b、out 我想用Vscod调试一个cpp文件和b个cpp文件怎么办?
我知道我需要编辑 tasks.json 和 launch.json 但我不知道怎么做。 我使用 ubuntu。 谢谢
我用ubuntu.
谢谢
#################编辑###################
我按照 Krzysztof Mochocki 所说的做了。经过一些小改动后,它就可以工作了。
首先,我从编译行 (-O3) 中删除了优化标志
其次,我将-g(调试标志)添加到编译行。
g++ -c -g -I../../include/boost_1_61_0 -std=c++14 -MMD -MP -MF "a.o.d" -o a.o my_Librar/a.cpp
最后的更改是在 launch.json 字段“程序”中,我在那里写的是程序路径,而不是 .o 路径
"program": "my/path/a",
现在我可以使用 Vscode 进行调试了。
谢谢 Krzysztof Mochocki
配置示例如下:
{
"name": "(gdb) Launch my super program with 3 args",
"type": "cppdbg",
"request": "launch",
"program": "/home/user/build/my_program.o",
"args": ["arg1", "--arg-2", "arg_3"],
"stopAtEntry": false,
"cwd": "/home/user/build/workspace",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
正如我在您的编译命令中看到的那样,我担心它不是最佳的。尝试使用一些 cmake,因为您将添加更多文件,维护您的编译命令将更加困难。
此外,您的代码不可调试,因为您没有添加任何调试信息参数。如果你使用 cmake,它会在指定一个参数后自动添加它:CMAKE_BUILD_TYPE=Debug
,所以你的发布示例 cmake 看起来像:
cmake ../src
和调试:
cmake -DCMAKE_BUILD_TYPE=Debug ../src