gcc -g 是一个常用的编译器命令,用于在编译过程中生成调试信息。选项 "-g" 会告诉编译器在生成的可执行文件中包含调试符号,以便进行调试。
通过在终端中运行 "gcc -g <source_file.c> -o <output_file>" 命令,你可以编译一个 C 源文件,并生成一个带有调试信息的可执行文件。请将 "<source_file.c>" 替换为你的源文件名,将 "<output_file>" 替换为你想要生成的可执行文件名。
例如,如果你有一个名为 "main.c" 的源文件,想要生成一个名为 "my_program" 的可执行文件,可以使用以下命令:
gcc -g main.c -o my_program
这将在当前目录下生成一个名为 "my_program" 的可执行文件,并包含调试信息,以便你可以使用调试器进行调试。
坑:
1、无法调试是因为这个-g参数没有添加
2、"targetArchitecture": "x86_64"可能不同平台需要设置
tasks.json配置
{
"version": "2.0.0",
"tasks": [
{
"label": "test",
"command": "mingw32-make",
"args": [],
"type": "shell",
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
}
},
]
}
launch.json配置
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"targetArchitecture": "x86_64",
"program": "${workspaceFolder}/testdebug",// 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
"environment": [],
"externalConsole": false, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "D:\\tools\\x86_64-12.2.0-release-win32-seh-msvcrt-rt_v10-rev2\\mingw64\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "test", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"logging": {
"moduleLoad": true,
"programOutput": true,
"trace": true,
"traceResponse": true,
"engineLogging": true
},
}
]
}
C文件
#include <stdio.h>
#include <stdint.h>
#include <string.h>
int main(int argc, char *const argv[]){
printf(" -h, --help help\n");
}
makefile文件[去掉-g将无法调试]
CC=gcc
all: testdebug.exe
testdebug.exe:
${CC} -g testdebug.c -o testdebug.exe #-g去掉将无法调试,切记
clean:
rm -f testdebug.exe
注意不同系统可能文件格式不一样
- WIN系统和LINUX系统的CRLF\LF
- 对环境变量可以在launch.json中配置
{
"configurations": [
{
......
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [{
"name": "PYTHONHOME",
"value": "Python路径"
}],
......
}
- tasks.json中使用gitbash,例如:
sh build_msys_release.sh
"tasks": [
{
"type": "shell",
"label": "test",
"command": "C:\\Program Files\\Git\\usr\\bin\\bash.exe",
"args": [
"-c",
"\"/d/build_msys_release.sh\""
],
"options": {
"cwd": "${workspaceFolder}",
"env": {
"PATH": "C:\\Program Files\\Git\\usr\\bin;${env:PATH}"
}
},
}
],
"version": "2.0.0"