vscode debug skills

1) VSCode 调试 C/C++ 代码时,如何显示动态分配的指针数组。

创建一个动态分配的一维数组:

int n = 10;
int *array = (int *)malloc(n*sizeof(int));
memset(array, 1, n*sizeof(int));

如果直接 Debug 时查看 array 指针,并不能看到数组所有的值。

查看 Debug 窗口,有一个 Watch(监视窗口)小窗口,可以添加想要查看的变量的值。

添加 *(int(*)[10])array 或 *array@10 后就可以查看 array 数组的所有值,也就是添加:

  1. *(type(*)[size])pointer, 其中 type 是数组类型,size 是数组长度,pointer 是分配空间的数组指针。该方法将指针强制转化为一个数组。
  2. *pointer@size,该方法同样可以查看数组的值。(这种方法比较简便,不容易出错。)
  3. startElement@size,该方法同样可以查看数组的值,不过 @ 前是第一个要显示的元素,@后面是显示数组元素个数。(这种方法比较简便,不容易出错。)

如上也可以在 调试控制台 中输入想获取结果的变量名或者表达式获得当前的值。 

 `@' is a binary operator for treating parts of memory as arrays. 二进制操作符,能够把 memory 当成数组。

The left operand of `@' should be the first element of the desired array, as an individual object. The right operand should be the desired length of the array. [p *array-variable@length]

It is often useful to print out several successive objects of the same type in memory; a section of an array, or an array of dynamically determined size for which only a pointer exists in the program.

    // 等效于 arr[2][3][4]
    int ***arr;
    int m = 2, n = 3, t = 4;
    if ((m > 0) && (n > 0) && (t > 0))
    {
        arr = (int ***)malloc(sizeof(int) * m);
        for (int i = 0; i < m; i++)
        {
            arr[i] = (int **)malloc(sizeof(int) * n);
            for (int k = 0; k < n; k++)
            {
                arr[i][k] = (int *)malloc(sizeof(int) * t);
                for (int l = 0; l < t; l++)
                {
                    arr[i][k][l] = 0x5AA0 + l;
                }
            }
        }
    }

常规手段是看不到 arr 的内容的:

【多维数组,还是用 x 命令来的方便。】 

再来个例子看看二维数组的打印:

直接全部输出二维数组: 

查看多维数 组 arr[size1][size2][...][sizeX] 通项的公式为:

  • ***...arr@sizeX@...@size2@size1   [有 X 个 size, 就有 X 个 *]

  • *(type(*)[size1][size2][...][sizeX])arr  

在窗口中添加 ***arr@4@3@2*(int(*)[2][3][4])arr,就可以查看数组的值。[如果是通过 malloc,分配的不连续的多维数组,这种方法并没有获得想要的结果,就像上边的例子 arr[2][3][4],元素地址是不连续的。]

Good for pointers to dynamicaly allocated memory.

int *array = (int *) malloc (len * sizeof (int));

p *array@len

p array[0]@len

(gdb) p *array@len
(gdb) p/x (
short[2])0x12345678
$1 = {0x1234, 0x5678}

友好的打印输出数组内容:

使用 gdb,print 查看变量值时,发现如果数组长度超过默认值长度的话,会出现省略号来表示多余的内容。

set print elements n  默认为 200,如果超过这个值就会以...替代。 设置为 0,则会全部显示。

可以使用  set print elements 0 来设置显示数组长度无限制。在使用 print 就可以完全显示变量内容了。可以通过  show print elements 查看显示数组长度设定。

help set print  显示所有 print 提供设置选项。show print  显示当 前 print 的设置选项值。

set print address on/off   打开(默认)/关闭打印地址

set print array on/off       打开/关闭(默认) 更好的显示数组。本选项开启后,会换行打印,一个元素一行,默认关闭情况下就是打印在一行。

set print array-indexes on/off  打开/关闭(默认) 显示数组 index。

gdb 查看变量或表达式的值

对于在调试期间查看某个变量或表达式的值,GDB 调试器提供有 2 种方法,即使用 print 命令或者 display 命令。

print 命令: 它的功能就是在 GDB 调试程序的过程中,输出或者修改指定变量或者表达式的值。print 命令可以缩写为 p。

(gdb) print num
(gdb) p num

其中,参数 num 用来代指要查看或者修改的目标变量或者表达式。

当程序中包含多个作用域不同但名称相同的变量或表达式时,可以借助 :: 运算符明确指定要查看的目标变量或表达式。:: 运算符的语法格式如下:

(gdb) print file::variable
(gdb) print function::variable

其中 file 用于指定具体的文件名,funciton 用于指定具体所在函数的函数名,variable 表示要查看的目标变量或表达式。另外,print 也可以打印出类或者结构体变量的值。

display 命令:和 print 命令一样,display 命令也用于调试阶段查看某个变量或表达式的值,它们的区别是,使用 display 命令查看变量或表达式的值,每当程序暂停执行(例如单步执行)时,GDB 调试器都会自动帮我们打印出来,而 print 命令则不会

也就是说,使用 1 次 print 命令只能查看 1 次某个变量或表达式的值,而同样使用 1 次 display 命令,每次程序暂停执行时都会自动打印出目标变量或表达式的值。因此,当我们想频繁查看某个变量或表达式的值从而观察它的变化情况时,使用 display 命令可以一劳永逸。

display 命令没有缩写形式,常用的语法格式如下 2 种:

(gdb) display expr
(gdb) display/fmt expr

注意,display 命令和 /fmt 之间不要留有空格。以 /x 为例,应写为 (gdb)display/x expr。

监控变量值的变化 - 观察断点:

GDB 调试器支持在程序中打 3 种断点,分别为普通断点观察断点捕捉断点。其中 break 命令打的就是普通断点,而 watch 命令打的为观察断点

借助观察断点 (watch) 可以监控程序中某个变量或者表达式的值,只要发生改变,程序就会停止执行。相比普通断点,观察断点不需要我们预测变量(表达式)值发生改变的具体位置。

(gdb) watch varible

watch 命令功能相似的,还有 rwatchawatch 命令。其中:

  • rwatch 命令:只要程序中出现读取目标变量(表达式)的值的操作,程序就会停止运行;
  • awatch 命令:只要程序中出现读取目标变量(表达式)的值或者改变值的操作,程序就会停止运行。

GDB 调试环境命令对应到 VSCode 调试控制台 (Debug Console) 窗口命令:

 如果你留意的话,VSCode 调试控制台已经告诉你了方法:

Execute debugger commands using "-exec <command>", for example "-exec info registers" will list registers in use (when GDB is the debugger)

所以呢,能够执行的 gdb command 都可以在 VSCode 的 Debug Console 中执行。 如果你了解 Gdb 命令就不难理解“如何显示动态分配的指针数组”的问题。

gdb 命令行VSCode 调试控制台窗口描述
x/fmt address(or variable name)-exec x/80wx address(or variable name)以十六进制显示 address 起始位置的memory,显示80个 DW。
p variable-exec p variable

显示或更改变量或表达式值
(-exec print/p 可以更改变量的值:p i=10 [改变变量的值 i=10])

variable查看某个变量或表达式的值。
variable = xxx更改
watch variable-exec watch variable监控变量值的变化

/fmt

a

Pointer - address 内存地址格式显示(与十六进制相似)

c

Read as integer, print as character

d

Integer, signed decimal

f

Floating point number

o

Integer, print as octal

s

Try to treat as C string

t

Integer, print as binary (t = 'two')

u

Integer, unsigned decimal

x

Integer, print as hexadecimal

GDB print命令高级用法 (biancheng.net)

GDB调试教程:1小时玩转Linux gdb命令

 https://www.cnblogs.com/puhongtao/p/14529605.html

 一小时轻松掌握GDB调试_哔哩哔哩_bilibili

VSCode 反汇编:

1 通过 Call Stack 右键

2 通过 debug console 调试窗口  比如 -exec disas main

disassemble 程序计数器:反汇编 pc 所在函数的整个函数。

disassemble addr-0x40,addr+0x40:反汇编 addr 前后0x40大小。

info line

info line number

Displays the start and end position in object code for the current line in source.

Display position in object code for a specified line in source.

disassemble 0xstart 0xend

 

disassemble
disassemble [Function]
disassemble [Address]
disassemble [Start],[End]
disassemble [Function],+[Length]
disassemble [Address],+[Length]
disassemble /m [...]
disassemble /r [...]

 

 

Displays machine code for positions in object code specified (can use start and end hex memory values given by the info line command.

 

 

/m 表示把源代码和汇编一一对应显示出来,在新版本中建议 /s,他会考虑 compiler 的优化。the output is in source line order, regardless of any optimization that is present.  Only the main source fileis displayed, not those of, e.g., any inlined functions. This modifier hasn't proved useful in practice and is deprecated in favor of /s.

/r 表示显示汇编指令的原生字节码。raw instructions in hex are included.

set disassemble-next-line

set disassemble-next-line on
set disassemble-next-line off
show disassemble-next-line

控制断点暂停或 step 后是否显示下一行的汇编,默认是 off。

总结: 

VSCode 为 gdb 提供图形化显示,gdb为 VSCode 提供任意的内存可视化和汇编语句显示,即 VSCode 是 gdb 的前端, 所以 gdb 的命令可以在 debug console 中执行。

使用 -exec help 查看命令帮助,比如 -exec help x :

查看内存命令语法为:

x /<Nuf> <addr>
# N 要打印的单元数,可以为负值,表示往前数
# u表示每个单元的大小(b(byte), h(halfword), w(word), g(giant, 8 bytes))
# f表示打印的格式(o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary), f(float), a(address),       
#               i(instruction), c(char), s(string)and z(hex, zero padded on the left))

查看 Variables 和 Memory 的方法总结

调试时在 VSCode 行内显示变量值的设定:

https://www.cnblogs.com/haoliuhust/p/17630701.html

inline values:

设置为 on:

VScode调试c代码时,如何显示动态分配的指针数组_vscode监视数组-CSDN博客

 VScode调试C++代码时无法查看STL容器(string、vector等)_vs code无法打开string-CSDN博客

VSCode + C/C++ 编译器:

VSCode 虽然功能强大,它只是一个编辑器,自己是没法编译代码的,需要安装C++编译器:

1. TDM-GCC很久没有更新了,版本比较老

TDM-GCC 10.3.0 release | tdm-gcc (jmeubank.github.io)

安装好后配置 Windows(10)环境变量:安装完成过后需配置环境变量: 我的电脑->属性->高级系统设置->环境变量->系统变量里找到path->编辑->>

把 C:\TDM-GCC-64\bin(根据你安装的位置,VSCode的没添加也一起添加) (系统变量相当于所有用户,所以一般修改系统变量的 path,path 就是命令行可以自动检索的地方)。

2. WinLibs 是 mingw 在 Windows 平台的分发库。WinLibs 专注于 Windows 下的GCC。优点是发布比较及时,发行版本丰富多样。免安装,多版本可以共存。
下载链接:WinLibs - GCC+MinGW-w64 compiler for Windows

如果用 C++ 仅仅是自己学习、不引入其他奇奇怪怪的库的话,下载 UCRT runtime 里的最新的Win64 压缩包就可以。下载好后,随便解压到一个地方就行,解压即可用。

去CMake官网:https://cmake.org/download/,拉到下面Binary distributions,下载Windows x64 ZIP,同样解压即可用。

配置环境变量:把你的 MinGW 和 CMake 解压路径下面的 bin 文件夹添加进 path,注意是 bin 文件夹。比如我的 MinGW 解压在 D:\CPP\environments\mingw64-ucrt,环境变量里就要添加D:\CPP\environments\mingw64-ucrt\bin。CMake 同理。

[极简教程]如何低成本、快速的在Windows电脑上搭建一个现代且干净的C++开发环境(VSCode+MinGW+CMake) - 知乎

VSCode Project 配置文件:

  • tasks.json (build instructions)
  • launch.json (debugger settings)
  • c_cpp_properties.json (compiler path and IntelliSense settings)

Get Started with C++ and MinGW-w64 in Visual Studio Code -- For Windows

Get Started with C++ on Linux in Visual Studio Code  -- For Linux

配置 C/C++ 配置文件:c_cpp_properties.json 文件

在该文件 "includePath"处添加 TDM GCC 的 include 路径即可。

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
                //"C:\\TDM-GCC-64\\include",
                //"C:\\TDM-GCC-64\\x86_64-w64-mingw32\\include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:\\TDM-GCC-64\\bin\\gcc.exe",
            "cStandard": "c17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

配置 launch.json 文件:
按下图流程点击“调试”->C++(GDB/LLDB),会进入调试,并生成一个launch.json文件,若没有则选择添加配置再选C++(GDB/LLDB)

再添加配置选择gdb,就会出现如下配置代码:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\TDM-GCC-64\\bin\\gdb.exe",
            "preLaunchTask": "compile",  // 调试会话开始前执行的任务, “preLaunchTask” 参数要和 task.json 文件中的 “label” 参数保持一致
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]

        }



    ]
}

配置 tasks.json 文件:

如果需要是c语言也就是gcc将下面的command项由g++改为gcc
如果是多文件编译(即函数声明和函数定义分开,不懂的别乱改),需要将args列表中的"${file}"项修改为"${workspaceFolder}/*.cpp" ,多文件推荐用cmake。

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "compile", //一定要和 launch.json 的 preLaunchTask 名字一致。任务的名字,就是在命令面板中选择的时候所看到的,可以自己设置。
            "command": "C:\\TDM-GCC-64\\bin\\g++.exe",
            "args": [ //编译时候的参数
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                //"-fexec-charset=GBK", //GBK编码,用于解决Winows中文乱码
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        },
    ],
    "version": "2.0.0"
}

task.json 的用途:用于指定编译器和链接文件等,告诉 VSCode 如何去编译这个程序。默认路径在 .vscode下面。

如何打开一个 task.json 文件:

然后点击 configure default Build Task 后,点击 c/c++:gcc.exe 生成活动文件:

label:任务的名称,显示在下拉列表中。
command:指定编译器的路径。
args:命令行参数,用于传递给编译器。可以添加链接库等。
"-std=c++17"用于支持C++17语言功能
problemMatcher:运行问题解析器,用于查找错误和编译器输出中的警告。
group:组对象。

lauch.json 的用途:用于调试程序,默认路径在 .vscode 下面。

配置完后,右下角点击 “ Add Configuration...”

name: 给配置项的起一个易于理解的名称,调试过程中可以在调试按钮处看到:

type:根据开发语言决定。eg.node.js 的 type为 node,C/C++ 语言的 type 为 cppdbg。
request:指定调试模式,有 launchattach 两种。使用 launch 可以为程序搭一个调试器,支持加断点。
program:指定要调试的程序。需要和 tasks.json 中的目标文件一致。
args:main 函数 (argc,argv) 的参数。启动时,传递到 main 函数中。
stopAtEntry: 如果想要在 main 函数停止,这里设为 true。
MIMode:配置调试器类型 gdb or lldb
miDebuggerPath: 配置调试器的路径(eg,gdb)。会自动搜索电脑中的调试器,根据 MIMode 的配置类型来找。

launch 和 attach 的区别:

  • 以 launch 方式启动的时候,vscode 直接从本地项目启动并自动的为我们自动添加一个调试器,这也是为什么我们能在launch模式下打断点的原因。这是我们最经常用的。
  • 而想以 attach 方式启动,通常需要一个已经在跑的项目,比如一个 web 服务,这个服务很可能是在远程或者在本地但是重启速度很慢的那种项目,因为这个 web 服务是在远程的我们没法打断点,但是可以通过 attach 启动的方式在这个远程的服务外面包裹一层调试器,达到调试的目的。

launch.json 文件中的 “preLaunchTask” 参数要和 task.json 文件中的 “label” 参数保持一致

GDB - Warning: Debuggee TargetArchitecture not detected, assuming x86_64.

解决办法:在 launch.json 中加上 "targetArchitecture": "x86_64", 

The architecture of the debuggee. This will automatically be detected unless this parameter is set. Allowed values are x86, arm, arm64, mips, x64, amd64, x86_64。risc-v ???

VSCode 调试 C++ 不进入标准库的配置方法

在 launch.json 中的 "setupCommands" 里加入如下一段,防止 gdb 打开标准库函数。

{
      "description": "防止 gdb 打开标准库函数",
      "text": "-interpreter-exec console \"skip -rfu std::.*\"",
      "ignoreFailures": false
}

这样设置后,即使点击了 Step Into (F11) 也不会进入标准库函数(尤其是模板库)-- 副作用?

c_cpp_properties.json 的用途:是 Visual Studio Code 中的一个配置文件,用于配置 C++ 项目的属性。其中包括编译器路径、头文件路径(includePath)、库文件路径、 C/C++标准、宏定义等。通过修改该文件,可以让 VS Code 正确地识别 C++ 项目的相关文件和库,从而实现代码补全、识别和高亮代码中的 C/C++ 关键字和类型,调试等功能。在编写代码时,通过该配置文件,VSCode 可以正确地链接头文件和库文件。

打开:点击右下角的 linux 或者 win32。(或使用快捷键Ctrl+Shift+P,输入C/C++:Edit Configuration)

或者点击 Ctrl + shift + p,在命令行输入 C/C++,选择 C/C++:编辑配置(UI)。接下来做几个选择:编译器路径,IntelliSense 模式,C 标准,C++ 标准等。最终生成 c_cpp_properties.json 文件。

https://www.zhihu.com/question/336266287/answer/2144611720

最后给大家推荐一个VS Code的教程:https://www.bilibili.com/video/BV1Jf4y1S7Bw/?spm_id_from=333.788.videocard.0

C++版本GCC版本支持情况GCC版本指定版本的命令标志
C++98完全支持GCC 6.1之前版本的默认模式
C++11完全支持GCC 4.8.1开始完全支持-std=c++11 or
-std=gnu++11
C++14完全支持GCC 6.1版本开始完全支持,GCC 6.1到GCC 10的默认模式-std=c++14 or
-std=gnu++14
C++17完全支持GCC 5开始支持,GCC 7基本完全支持,GCC 8完全支持。GCC 11的默认模式-std=c++17 or
-std=gnu++17
C++20未完全支持GCC 8开始陆续支持(因该标准较新,故GCC支持都是实验性质的)-std=c++20 or
-std=c++2ag++ or
-std=gnu++20
C++23未完全支持(标准还在发展中)GCC 11开始支持(因该标准仍不断发展,故GCC支持都是实验性质的)-std=c++2bg++ or
-std=gnu++2b

C++ Standards Support in GCC- GNU Project

选项 -std=gnu++17 和 -std=c++17 相比添加了相应 C++ 标准的 GNU 扩展。

VSCode 各种断点

Debugging in Visual Studio Code

1. 右键 

2. Run --> New Breakpoint 

Logpoint: A Logpoint is a variant of a breakpoint that does not "break" into the debugger but instead logs a message to the console (DEBUG CONSOLE). Logpoints are especially useful for injecting logging while debugging production servers that cannot be paused or stopped.

A Logpoint is represented by a "diamond" shaped icon. Log messages are plain text but can include expressions to be evaluated within curly braces ('{}').

日志断点是普通断点的一种变体,区别在于不会中断调试,而是可以把信息记录到控制台。日志断点对于调试无法暂停或停止的服务时特别有用。通过 {} 使用变量表达式,比如:

array[30] = {array[30]}

  • 日志断点添加成功后会有是一个菱形图标。

Expression condition: The breakpoint will be hit whenever the expression evaluates to true.

Hit count: The 'hit count' controls how many times a breakpoint needs to be hit before it will 'break' execution. Whether a 'hit count' is respected and the exact syntax of the expression vary among debugger extensions.

Condition and hit count editing support is also supported for function and exception breakpoints.

条件断点:

在断点处右键点击,选择 "Edit Breakpoint",在弹出的窗口中勾选 "Condition" 并输入条件表达式,该断点只会在条件为真时被触发。

一个强大的 VS Code 调试功能是能够根据表达式、命中计数或两者的组合设置条件。

  • 表达式条件:只要表达式求值为 true ,就会触发断点。
  • 命中计数:“命中计数”控制断点在“中断”执行之前需要命中多少次。是否尊重“命中计数”以及表达式的确切语法因调试器扩展而异。

Inline breakpoints: Inline breakpoints will only be hit when the execution reaches the column associated with the inline breakpoint. This is particularly useful when debugging minified code which contains multiple statements in a single line.

An inline breakpoint can be set using Shift+F9 or through the context menu during a debug session. Inline breakpoints are shown inline in the editor.

Inline breakpoints can also have conditions. Editing multiple breakpoints on a line is possible through the context menu in the editor's left margin.

仅当执行到达与内联断点关联的时,才会命中内联断点。这在调试在一行中包含多个语句的缩小代码时特别有用。比如 for 循环,短路运算符等一行代码包含多个表达式时会特别有用。调试之后,每次运行到该内联处的代码都会中断。

Function breakpoints: Instead of placing breakpoints directly in source code, a debugger can support creating breakpoints by specifying a function name. This is useful in situations where source is not available but a function name is known.

A function breakpoint is created by pressing the + button in the BREAKPOINTS section header and entering the function name. Function breakpoints are shown with a red triangle in the BREAKPOINTS section.

Data breakpoints: If a debugger supports data breakpoints, they can be set from the context menu in the VARIABLES view. The Break on Value Change/Read/Access commands will add a data breakpoint that is hit when the value of the underlying variable changes/is read/is accessed. Data breakpoints are shown with a red hexagon in the BREAKPOINTS section.

Data breakpoints-exec watch/rwatch/awatch variable  

 GCC编译器30分钟入门教程 (biancheng.net)

VS2017/VS2019/VS2022 + VSCode

Windows 10下vscode使用visual studio 2017的MSVC配置C/C++编译环境_vscode 配置visual studio环境-CSDN博客

Configure Visual Studio Code for Microsoft C++

【精选】VScode与VS中的MSVC配置C++开发环境记录_vscode使用vs2019的编译器_A-SHY-MAN的博客-CSDN博客

VSCODE 中 WARNING C4819: 该文件包含不能在当前代码页(936)中表示的字符

1. 对于 VSCODE 中的 TASKS.JSON

添加 msvc 编译选项 args: /source-charset:utf-8 设置代码输入为 utf-8。

2. 对于 CMAKE

在 CMakeList.txt 中添加

if (MSVC)

    # 设置 msvc 输入代码编码格式为 utf-8

    set(CMAKE_C_FLAGS /source-charset:utf-8)

endif()

3. 对于 VS2017/VS2019/VS2022

vscode 中 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符

来自 <vscode 中 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符_vscode终端活动代码页: 936-CSDN博客>

vscode 中 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符_vscode终端活动代码页: 936-CSDN博客

VSCode  + Git :
Edit in settings.json:

"git.path": "S:/install/Git/bin/git.exe",

"terminal.integrated.shell.windows" : "S:/install/Git/bin/bash.exe"

可以在 TERMINAL 终端输入cmd 切换回系统终端, 也可以再输入 bash 切换 Git Bash 终端

"git.enableSmartCommit": true, //开启智能 commit. 如果不是 vscode 可视化 Git gui 使用者,无需配置该项.(该项配合 git scm 使用)

VSCode 编辑窗口禁用预览模式

当在侧栏中单击一个文件时,Visual Studio 代码会在 预览模式下 打开它,这样您就可以快速查看文件。(默认设置)

预览模式的行为

  • 预览模式中的选项卡未保持打开状态。
  • 只要您从侧边栏打开另一个文件,它就会覆盖现有文件(如果它处于预览模式)。
  • 如果选项卡处于预览模式,则标题的标题将以斜体显​​示,如下面的屏幕截图所示。

如果文件已在预览模式下打开,则将其转换为编辑模式:

  • 双击标题栏中的斜体文件名,或
  • 按 Ctrl - K Enter

重要!!! 如果要编辑文件,请不要在预览模式下打开,而是双击侧栏中的文件。

如果要一起禁用预览模式,即:转到Pereferences>设置>“搜索settings.json”>在最后一行之前 } 将逗号添加到最后一个选项并粘贴 "workbench.editor.enablePreview": false   

例如:

{
    "editor.fontFamily": "'Consolas', 'monospace', 'Times New Roman'",
    "terminal.integrated.fontFamily": "monospace",
    "editor.fontSize": 13,
    "workbench.iconTheme": "vscode-icons",
    "workbench.editor.enablePreview": false, // <-----------

}

对于不想禁用 预览模式的人:

使用快捷键 Quick Open / Ctrl + P 将打开的文件固定在编辑器中并为编辑状态, 是的 ,此方式不需要切换将您的手放在鼠标上,双击文件列表。

说明:

  • workbench.editor.enablePreview: 设置为全局启用或禁用预览编辑器

  • workbench.editor.enablePreviewFromQuickOpen: 将其设置为从快速打开(Ctrl+P)中打开时启用或禁用预览编辑器

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Apollo是一个来自华为的开源项目,是一个面向大规模机器学习的高效神经网络训练框架。而VSCode是一款由微软开发的轻量级代码编辑器。所以,Apollo VSCode Debug指的是在使用Apollo框架进行开发时,通过VSCode编辑器来进行调试。 在进行Apollo VSCode Debug之前,需要进行一些准备工作。首先,确保已经安装了VSCode编辑器以及相应的Apollo插件。其次,需要有一个Apollo的项目代码,在VSCode中进行打开。 接下来,我们可以通过以下几个步骤来进行Apollo VSCode Debug。 第一步,配置调试环境。在VSCode的工具栏中选择"调试",点击"添加配置"。在弹出的配置文件中,填写相关的调试信息,例如调试模式、入口文件等。这些信息将用于配置调试器。 第二步,设置断点。在代码中选择想要调试的位置,点击行号旁边的空白区域,添加断点。断点将会在程序执行到该处时暂停,方便我们对代码进行调试。 第三步,运行调试。点击VSCode工具栏中的"调试"按钮,选择刚刚配置的调试环境。然后,点击"开始调试"。Apollo框架会在VSCode中启动,并根据我们的配置信息运行。 第四步,调试代码。当程序执行到我们设置的断点位置时,会自动暂停运行。这时,我们可以通过在VSCode中的调试面板上看到当前的变量、堆栈信息等。通过逐步执行、观察变量变化等方式来调试代码。还可以使用控制台面板来输入调试命令,与程序进行交互。 最后,我们可以根据调试过程中的问题,对代码进行修改和优化。在调试结束后,点击调试器面板的"关闭"按钮,结束调试状态。 通过Apollo在VSCode中进行调试,可以提高开发效率,快速定位问题,促进代码的开发和调试过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值