vs code c语言断点调试window版解决方案

Posted 雪狼之夜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs code c语言断点调试window版解决方案相关的知识,希望对你有一定的参考价值。

序:

        1、这一步不懂劝退多少人,博主搜到了多少博文都是mac的,结果发现都对不上!

        先看最终效果演示

 接下去我每个步骤,你都仔细看,漏看一个环境都对不上!

正文

        1、先去看博主的c/c++运行环境配置图解(window篇)_雪狼之夜的博客-CSDN博客

     你要是自己安装完了,你要记下MinGW的路径后面要用(关键点!!!)

        2、先安装插件Code Runner和C/C++ Extension Pack

 

         3、安装完后别管其他的,跟我下面一步一步来

        4、新建一个test.c的文件,然后用vs打开这个文件所在目录代码如下

#include <stdio.h>

int main()
	int a=1;
    int b=2;
    printf("2222222");

         5、vscode 菜单->设置-把下面那三个先勾起来,保存

           6、先运行,看看能不能动的了

         7、安装c调试@category:debuggers C

         7、选择c++(GDB/LLDB)

 

 这时候你的目录下多了一个文件/.vscode/tasks.json, 注意 ,先别管他!!!

 回去在点调试 创建 launch.json 

 多了一个文件

 点他

 

 


    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "输入程序名称,例如 $workspaceFolder/a.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "$fileDirname",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/path/to/gdb",
            "setupCommands": [
                
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                ,
                
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                
            ]
        

    ]

 好这里开始别动!,注意!!!!!!!你的MinGW的路径 就是正文1第一步提的那个!!!!!!复制一下

"miDebuggerPath": "F:/MinGW/bin/gdb.exe",

"program": "$workspaceFolder/test.exe",

然后来你回来test.c,运行

 好的 第一步完成了,这个只针对test.c这个文件

 上面你跑通了,我们在继续

打开launch.json  修改下保存

 "program": "$workspaceFolder/$fileBasenameNoExtension.exe",
 "preLaunchTask": "tast gcc" //修改此项

在打开tasks.json

1、注释掉// "-fdiagnostics-color=always",

2、修改label 

"label": "tast gcc",

    "tasks": [
        
            "type": "cppbuild",
            "label": "tast gcc",
            "command": "F:\\\\MinGW\\\\bin\\\\gcc.exe",
            "args": [
                // "-fdiagnostics-color=always",
                "-g",
                "$file",
                "-o",
                "$fileDirname\\\\$fileBasenameNoExtension.exe"
            ],
            "options": 
                "cwd": "$fileDirname"
            ,
            "problemMatcher": [
                "$gcc"
            ],
            "group": 
                "kind": "build",
                "isDefault": true
            ,
            "detail": "调试器生成的任务。"
        
    ],
    "version": "2.0.0"

保存!!!

好了,这下,我们回到test.c调试

 

VS Code 调试器中的 Jest + Babel 导致断点移动

【中文标题】VS Code 调试器中的 Jest + Babel 导致断点移动【英文标题】:Jest + Babel in VS Code debugger causes breakpoints to move 【发布时间】:2018-08-06 12:05:25 【问题描述】:

我正在尝试使用 babel、jest 和 vs 代码调试一个简单的项目。当我设置断点然后开始调试时,我的断点跳来跳去,不再是我开始时所在的位置。可以在此处查看示例 repo - https://github.com/RyanHirsch/starter-node

我已更新我的launch.json 以包含


  "name": "Jest",
  "type": "node",
  "request": "launch",
  "program": "$workspaceRoot/node_modules/jest/bin/jest.js",
  "stopOnEntry": false,
  "args": ["-i", "$file"],
  "cwd": "$workspaceRoot",
  "runtimeExecutable": null,
  "sourceMaps": true,
  "protocol": "inspector"

我的.babelrc 看起来像:


  "plugins": ["@babel/plugin-proposal-object-rest-spread"],
  "sourceMaps": "inline",
  "presets": [
    [
      "@babel/preset-env",
      
        "targets": 
          "node": "6.10"
        
      
    ]
  ]

我认为源地图选项足以让它工作,但我错了。为了使我的断点保持在其原始位置,需要进行哪些更改?特别是在尝试调试我的测试时。

==== 编辑 ====

在我的断点位于测试行 10 和实现行 4 之前:

当我通过选择我的测试文件开始调试,然后在 VS Code 调试窗格中运行 Jest 时,我的断点跳转到测试行 9 和实现行 6:

在具有以下扩展的节点 9.6.1 上运行:

DavidAnson.vscode-markdownlint
EditorConfig.EditorConfig
Orta.vscode-jest
PKief.material-icon-theme
PeterJausovec.vscode-docker
Shan.code-settings-sync
bungcip.better-toml
dbaeumer.vscode-eslint
dracula-theme.theme-dracula
dzannotti.vscode-babel-coloring
eamodio.gitlens
esbenp.prettier-vscode
gerane.Theme-FlatlandMonokai
humao.rest-client
mauve.terraform
mikestead.dotenv
mjmcloug.vscode-elixir
mohsen1.prettify-json
ms-vscode.Theme-MaterialKit
ms-vscode.azure-account
ms-vscode.cpptools
ritwickdey.LiveServer
sbrink.elm
shanoor.vscode-nginx
vscodevim.vim

【问题讨论】:

你能显示一些运行前和运行后的截图吗?你在哪里放置断点你如何运行它?因为项目断点对我来说运行得很好。还要提到你使用的节点和 NPM 版本 虽然这并不能解释为什么会发生这种情况,但是您可以随时尝试将retainLines: true 添加到您的.babelrc 中,这样就不会混淆断点应该在哪一行。 添加retainlines 将打破任何列断点,并根据文档产生“古怪代码”。看起来源映射应该可以工作:( 好吧,并不是说它有很大帮助,但你并不孤单github.com/babel/babel/issues/6008 【参考方案1】:

安装节点:

https://nodejs.org/en/download/

安装 Chrome 插件:

https://chrome.google.com/webstore/detail/nodejs-v8-inspector-manag/gnhhdgbaldcilmgcpfddgdbkhjohddkj?hl=en

在您的终端中运行以下脚本

node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand

更多参考vs代码中的故障排除参考

https://jestjs.io/docs/en/troubleshooting

 
  "version": "0.2.0",
  "configurations": [
    
      "name": "Debug Jest Tests",
      "type": "node",
      "request": "launch",
      "runtimeArgs": [
        "--inspect-brk",
        "$workspaceRoot/node_modules/jest/bin/jest.js",
        "--runInBand"
      ],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen"
    
  ]

Babel 会将 es6 转换为 es5,因此它不依赖于检查。 要进行检查,您需要节点和节点 chrome 扩展。

享受编码

【讨论】:

似乎在 jest 23.6.0 上再次出现“移动断点”问题,一旦遇到第一个断点,您可以设置一个断点,它将停止【参考方案2】:

遇到这个问题(使用 jest 23.6.0),检查这是创建反应应用程序的已知问题,在此拉取请求上解决:

https://github.com/facebook/create-react-app/pull/3605/files

将以下配置应用到我的 launch.json

"type": "node", "request": "launch", "name": "Jest All", "program": "$workspaceFolder/node_modules/jest/bin/jest", "args": [ "test", "--runInBand", "--no-cache" ], "sourceMaps": false, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen" ,

设法让它在正确的断点处中断。

【讨论】:

更新,这工作了一段时间但仍然失败,刚刚回滚到 Jest 22,我正在使用的当前配置:***.com/questions/52454412/… 更新,Jest 和 VS Code 都增强了它的集成,现在可以轻松地将它们集成到基于 create-react-app 的应用程序和从头创建的应用程序中,我创建了一个帖子来介绍这个主题:basefactor.com/…【参考方案3】:

@RyanHirsch ;只需在你的 babelrc 中使用 retainLines": truesourceMap: "inline" 就可以了。

【讨论】:

【参考方案4】:

对我有用的是通过将"sourceMaps": false 添加到启动配置来关闭源映射。我不完全理解它为什么会起作用。

例子:


  "type": "node",
  "request": "launch",
  "name": "Jest Current File",
  "program": "$workspaceFolder/node_modules/.bin/jest",
  "args": [
    "$relativeFile",
    "--config",
    "jest.config.js",
    "--no-cache"
  ],
  "console": "integratedTerminal",
  "internalConsoleOptions": "neverOpen",
  "disableOptimisticBPs": true,
  "sourceMaps": false,
  "windows": 
    "program": "$workspaceFolder/node_modules/jest/bin/jest",
  

【讨论】:

【参考方案5】:

经过一番努力,下面是我如何让 Jest 与 Babel 调试以始终如一地工作并在正确的行上中断。

主要是我使用了开发者'Orta'的优秀Jest plugin for VSCode,并通过在VSCode的扩展面板中搜索'Jest':

从那里我点击了测试中出现的Debug 链接,这使我能够在我的测试和应用程序代码中正确地命中断点。

在测试文件中成功打断点:

在源码文件中成功打断点:

【讨论】:

【参考方案6】:

适用于 babel-jest 25.0.0 的正确配置 & jest 25.0.0 如下:


    "version": "0.2.0",
    "configurations": [
        
            "name": "Debug Jest Tests",
            "type": "node",
            "request": "launch",
            "runtimeArgs": [
                "--inspect-brk",
                "$workspaceRoot/node_modules/.bin/jest",
                "--runInBand"
            ],
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "port": 9229
        
    ]

有关更多信息,我从以下 repository 获取了我的配置

【讨论】:

以上是关于vs code c语言断点调试window版解决方案的主要内容,如果未能解决你的问题,请参考以下文章

VS Code 调试器到达第一个断点的速度极慢

C++ VS 调试器转移行为?

调试器不会在 VS Code for Python 中的断点处停止

无法在 VS Code 中调试颤振飞镖代码,未验证断点错误

code::blocks 如何打断点

无法在 VS Code 中设置断点调试节点 Typescript