我试图使用断点在vscode中调试我的C,但每次运行它时,调试器似乎都会跳过它们(断点将颜色从红色变为灰色)。我看了这个question,这基本上和我的问题一样。我尝试了所有的答案,但没有一个有效(没有一个被提问的人设定为“答案”,因此我再次问这个问题的原因)。所以我的问题是,如何让vscode断点在C中工作?
Vscode版本: windows 10上的1.73.1
gdb版本: 12.1
launch.json
{
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${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
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc.exe build active file",
}
]
tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe build active file",
"command": "make",
"args": [
"all"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
makefile
dynamic_array: dynamic_array.c dynamic_array.h
gcc -c dynamic_array.c
test: test.c dynamic_array.h
gcc -c test.c
all: dynamic_array.o test.o
gcc -o test.exe dynamic_array.o test.o
clean:
del -f *.o & del -f *.exe & del -f *.out
发布于 2022-11-17 09:28:47
makefile有很多问题。首先,您构建的目标是all
,它依赖于dynamic_array.o
和test.o
,但是没有构建这些规则,只有构建dynamic_array
和test
的规则。
因此,make
将使用其默认规则构建.o
文件,即:
$(CC) $(CPPFLAGS) $(CFLAGS) -c
这将导致下一个问题,这可能是您所看到的断点问题的原因--无论是隐式规则还是试图写入的规则,都不包括用于-g
的gcc
标志。-g
标志打开调试信息的生成。
我至少会将makefile重写为:
dynamic_array.o: dynamic_array.c dynamic_array.h
gcc -c -g3 dynamic_array.c
test.o: test.c dynamic_array.h
gcc -c -g3 test.c
all: dynamic_array.o test.o
gcc -g3 -o test.exe dynamic_array.o test.o
clean:
del -f *.o & del -f *.exe & del -f *.out
https://stackoverflow.com/questions/74472007
复制相似问题