首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复在VScode (gdb)中调试C时忽略的断点?

如何修复在VScode (gdb)中调试C时忽略的断点?
EN

Stack Overflow用户
提问于 2022-11-17 08:04:06
回答 1查看 21关注 0票数 0

我试图使用断点在vscode中调试我的C,但每次运行它时,调试器似乎都会跳过它们(断点将颜色从红色变为灰色)。我看了这个question,这基本上和我的问题一样。我尝试了所有的答案,但没有一个有效(没有一个被提问的人设定为“答案”,因此我再次问这个问题的原因)。所以我的问题是,如何让vscode断点在C中工作?

Vscode版本: windows 10上的1.73.1

gdb版本: 12.1

launch.json

代码语言:javascript
运行
复制
{
"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

代码语言:javascript
运行
复制
{
"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

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-17 09:28:47

makefile有很多问题。首先,您构建的目标是all,它依赖于dynamic_array.otest.o,但是没有构建这些规则,只有构建dynamic_arraytest的规则。

因此,make将使用其默认规则构建.o文件,即:

代码语言:javascript
运行
复制
$(CC) $(CPPFLAGS) $(CFLAGS) -c

这将导致下一个问题,这可能是您所看到的断点问题的原因--无论是隐式规则还是试图写入的规则,都不包括用于-ggcc标志。-g标志打开调试信息的生成。

我至少会将makefile重写为:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74472007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档