首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Linux Vim 中将缩进宽度设置 2 或 4 个空格?

Vim 是几十年来最流行基于终端文本编辑器之一。但无论你使用 Vim 多久,总会有更多你不知道技巧和窍门。这是关于 Vim 中将缩进宽度设置 2 个空格或 4 个空格。... vimrc 文件(位于 ~/.vimrc)中,添加以下行以 Vim 中自动使用 2 个空格而不是制表符。...设置自动缩进假设您正在编写一行代码并且下一行代码需要缩进,您按 Enter 键转到下一行,但不会自动应用缩进。要自动缩进行,将以下行添加到您 'vimrc'。...我还建议您对tabstop和使用相同值shiftwidth。使用不同值可能会弄乱您缩进。...结论以上所有内容都适用于新文件,要在 Vim 中将当前打开文件中制表符转换为空格,请按 Esc 键进入 Normal 模式。

5.7K00
您找到你想要的搜索结果了吗?
是的
没有找到

linux下gdb常用调试命令

main设置函数断点 b 9 设置指定行断点 b 将下一行设置断点 b test if a == 10 设置条件断点 delete 删除断点 d 3 删除指定断点 condition 修改条件...8 查看指定堆栈帧信息 info frame 查看当前堆栈帧更详细信息 print a 打印变量信息 print/x a 十六进制输出变量信息 print a + b 可以进行表达式计算 print...显示变量类型 dump memory 输出文件名 内存起始地址 内存终止地址 restore 文件名 binary 起始位置 watch buf buf值一旦改变,会触发watchpoint...address on 打开地址输出,当程序显示函数信息时,GDB会显出函数参数地址。...系统默认为打开 set print object C++中,如果一个对象指针指向其派生类,如果打开这个选项,GDB会自动按照虚方法调用规则显示输出,如果关闭这个选项的话,GDB

2.9K20

cuda核函数中可以按地址调用普通变量么?

请问cuda核函数中可以按地址调用普通变量么?...但需要注意这个问题: (1)最终指向global memory地址空间指针,可以本次kernel启动,或者下次kernel启动任何线程中都是有效。...如果错误本次kernel启动本block中其他线程使用,则自动得到被替换成对应线程对应local memory位置值。...另外两点需要注意: (4)部分平台支持P2P Access情况下,则指向一张卡global memory指针,可以另外一张卡上kernel中被使用,类似情况(1)。...此时这种内存空间上寻址可以: (1)增强CPU也能访问他们,哪怕某段时间实质存储后备介质并非内存(自动page fault + 数据迁移) (2)GPU访问时候更好性能,会自动引入可能内存

3.1K70

【Unity3D 灵巧小知识点】 ☀️ | 层级面板中 ‘小手指‘ 作用: Scen中将该物体设置不可选中状态

Unity 平台提供一整套完善软件解决方案,可用于创作、运营和变现任何实时互动2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。...也可以简单把 Unity 理解一个游戏引擎,可以用来专业制作游戏!...---- Unity小知识点学习 层级面板中 ‘小手指’ 作用: Scen中将该物体设置不可选中状态 层级面板中有一个小手指一样图标(我也不知道官方叫啥~) 当我们给物体选上之后,...他就会变成一个禁止状态,就是上图中Plane物体前面那个样子 正常没选中时候就是Cube前面那个样子图标,点一下就会选中!...小手指作用就是,当我们点了这个小手指,成为一个斜杠似的禁止状态时 Scene场景中我们就没法通过鼠标来选中这个物体了 ! 演示效果: ----

2.1K31

C语言:---gdb多线程调试

A、查看栈信息 当程序被停住了,你需要做第一件事就是查看程序是在哪里停住。当你程序调用了一个函数,函数地址,函数参数,函数内局部变量都会被压入“栈”(Stack)中。...比如:函数地址,调用函数地址,被调用函数地址,目前函数是由什么样程序语言写成、函数参数地址及值、局部变量地址等等。...这非常方便于程序调试,可以程序运行任意位置设置断点,并在该断点用GDB产生一个信号量,这种精确地在某处产生信号非常有利程序调试。...也就是说,GDB会根据你所调试程序语言,来设置自己语言环境,并让GDB命令跟着语言环境改变而改变。...info frame 查看当前函数程序语言。 info source 查看当前文件程序语言。 如果GDB没有检测出当前程序语言,那么你也可以手动设置当前程序语言。

2K20

GDB调试笔记

GDBLinux命令行下对C/C++程序进行调试常用一个命令, 现将平时记录在本子上笔记整理记录一下....,相关命令: break [函数名,行数或者指令地址] [condi] 指定地方加上断点 例: (gdb) set $counter = 0 (gdb) break 26 if ++$counter...== 99 第26行设置断点,每次触发断点时候执行判断条件,仅在判断条件真的时候使程序断点处停止。...frame栈中参数、返回地址和局部变量保留一块内存区,必要时在过程调用中使用,相关命令: frame[args]: 从一个栈帧移动到另一个,并打印选择栈帧。...$ps:程序状态寄存器 $sp:stack pointer栈指针 $fp:frame pointer 指向当前栈帧指针 三、变更执行 1)修改变量 print i=num,赋值并打印变量i set

1.2K30

掌握GDB调试工具,轻松排除bug

访问系统数据区,尤其是往系统保护内存地址写数据。比如:访问地址0地址。 内存越界(数组越界,变量类型不一致等)访问到不属于当前程序内存区域。...例如在循环体中可以设置break ... if i = 100 来设置循环次数 删除断点 (gdb) clear location:参数 location 通常某一行代码行号或者某个具体函数名。...) until location:参数 location 某一行代码行号 查看变量值 print(p) p num_1:参数 num_1 用来代指要查看或者修改目标变量或者表达式 它功能就是...(gdb) info frame 我们可以查看当前栈帧中存储信息 该命令会依次打印出当前栈帧的如下信息: 当前栈帧编号,以及栈帧地址; 当前栈帧对应函数存储地址,以及该函数被调用时代码存储地址...当前函数调用者,对应栈帧地址; 编写此栈帧所用编程语言; 函数参数存储地址以及值; 函数中局部变量存储地址; 栈帧中存储寄存器变量,例如指令寄存器(64位环境中用 rip 表示,32环境中用

59000

gdb基础命令和常用操作补充

作用如下: 让程序按照自己定义要求运行,不必每次改变程序 让程序设置断点处停住,并且检查程序执行情况 动态改变程序执行环境 一、启动调试 gdb <program...gdb中表示寄存器名时前面要加个$,例如p $esp可以打印esp寄存器值,如esp寄存器值是0xbff1c3f4,所以x/20 $esp命令查看内存中从0xbff1c3f4地址开始20个32位数...;set var 设置变量值 7.设置位置断点,设置断点命令b (break简写) b linenum b function b filename:linenum b filename:function...查看当前运行信息 info b  breakpoints 设置断点标号 info args/frame/locals/line  filename:function...删除断点可以使用 clear和d(delete简写) clear删除断点, 使用方法和b命令类似 d  [breakpoints]    breakpoints 设置断点标号 10.

2.3K00

Linux gdb使用基础

GDB主要有以下功能: 设置断点 单步调试 查看变量值 动态改变程序执行环境 分析崩溃程序产生core文件 GDB常用命令 命令 简写 含义 file - 装入待调试可执行文件 run r 执行程序...= 0 - 根据条件设置断点(sum不等于0时,第9行设断点) set varsum=0 - 修改变量值(使sum变量0) watch - 监视一个变量值 examine - 查看内存中地址...可以继续使用info locals命令查看add()函数中局部变量值,也可以使用frame 1命令先选择主函数所在1号帧栈,再使用info locals命令查看主函数中局部变量值: (gdb)...如果局部变量默认不是初始化为0,可以GDB环境下通过set var命令修改变量值,并查看运行效果。...由于程序本电脑上运行无误,我们现在故意修改sum初始值100,并查看最终运行结果: (gdb) set var sum=100 No symbol "sum" in current context

2.3K10

解决etcporfile下设置环境变量以后zsh没有起效问题

问题1: 今天添加java环境变量时候,我/etc/profile添加了环境变量,因为我使用是zsh,source /etc/profile以后,zsh主题和插件都没有了,java -version...java -version提示没有此命令,懵~ 推测问题原因: 由于终端中source /etc/profile只是让本shell进程执行,相当于只是本shell执行了环境变量,所以重启之后依旧失效...推测解决方法: ~/.zshrc中添加source /etc/profile 重启shell 输入java -version 完美解决!...所以推测还有一种方法,/etc/zsh/zprofile下面export相应环境变量. 问题2: 在后面的使用中,发现切换到root用户时候,java环境变量又不生效了。...解决办法: /root/.bashrc文件尾部添加: source /etc/profile ok,完美解决

3.8K10

GDB实现原理和使用范例

(基础类型) N 个属性(attribute), 用于具体描述一个DIE AT_low_pc, AT_high_pc 分别代表函数 起始/结束 PC地址 AT_frame_base 表达函数栈帧基址...(frame base) 寄存器 rbp 值 AT_name 描述函数名字 s_client_main AT_decl_file 说这个函数 apps/s_client.c 文件中声明 AT_decl_line.../bin/Debug/workbinary -x gdbcommands -x args 3.4. gdb运行相关 3.4.1查看变量 info local(当前函数局部变量) info b(当前设置断点...打印 p :打印某个变量名 x/,比如说x/10xb :打印开始10个地址,以十六进制单字节输出。...查看当前程序进程空间地址分布 set env LD_LIBRARY_PATH /data/mariolu/tls13/openssl-OpenSSL_1_1_1/设置当前运行环境 gdb -tui

5K10

GDB调试

让程序停止在你指定位置:设置断点 3. 停止点查看当前程序状态:变量、寄存器值 4....break +:往后数offset行设置断点 break -:往前数offset行设置断点 break *:指定虚拟地址设置断点 break...frame [n]:frame(f)切换帧,n一个从0开始数,表示栈中层次编号,0代表栈顶。...set value=11:设置变量value11 方便变量: 有时候想挨个打印数组值,如果GDB能提供一个变量作为数组下标,随着循环进行变量值也随着变化,这样查看数组元素值就非常方便了。...修改变量: 上节设置变量中提到可以通过set命令来设置变量值,但当你代码中变量GDB参数名字一样时,需要如下设置

2.1K10

GDB调试-从入门实践到原理

查看断点列表 break [+-]offset 在当前位置偏移量[+-]offset处设置断点 break *addr 地址addr处设置断点 break ... if expr 设置条件断点,仅仅在条件满足时...命令 作用 print &variable 查看变量内存地址 watch *(type *)address 通过内存地址间接设置断点 watch -l variable 指定location参数 watch...info frame [addr] 描述当前选择栈帧 info args 当前栈帧参数列表 info locals 当前栈帧局部变量 多进程、多线程 多进程 GDB调试多进程程序(程序含fork...variablexxx set {type}address = xxx 给存储地址address,类型type变量赋值 info frame 显示函数堆栈信息(堆栈帧地址、指令寄存器值等...frame 栈帧用来存储函数变量值等信息,默认情况下,GDB总是位于当前正在执行函数对应栈帧上下文中。 在前面的例子中,由于当前正在print()函数中执行,GDB位于第0帧上下文中。

2.3K30

Biu一下GDB

显示指定行号或者指定函数附近源代码 b break 指定行号或指定函数开头设置断点 r run 运行程序,直到程序结束或遇到断点 c continue 程序中断后继续执行程序,直到程序结束或遇到断点停下...如果有函数调用,则进入函数内部 u until 执行到指定行号或指定函数开头 p print 显示变量或表达式值 disp display 把一个表达式设置display,当程序每次停下来时都会显示其值...调用栈由栈帧(Stack Frame)组成,每个栈帧对应着一个未运行完函数。GDB中可以用backtrace(简称bt)命令打印所有栈帧信息。...如果要实现真正交换,我们应该传入是存储变量地址,此时函数swap形参类型应该为指针类型 PS: C语言变量都是放在内存中,而内存中间每一个字节都有一个称为地址(address)编号。...每一个变量都占有一定数目的字节(可以用sizeof运算符获得),其中第一个字节地址称为变量地址

32330

【Linux】Coredump调试

Linux环境下,当程序异常退出(发生段错误)时,会产生一个core文件,该文件记录了程序运行时内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解是程序工作当前状态存储生成一个文件...---- 前期设置 设置core文件生成目录,其中%e表示程序文件名,%p表示进程ID,否则会在程序的当前目录生成dore文件。...会打印出: 栈层编号 当前函数名 函数参数值 函数所在文件及行号 函数执行到语句 info frame/f 可以查看到更详细的当前栈层信息,只不过,大多数都是运行时内存地址。...比如:函数地址,被调用函数地址,目前函数是由什么样程序语言写,函数参数地址及值,局部变量地址等。如下图所示。 info args 打印出当前函数参数名及其值。...info locals 打印出当前函数中所有局部变量及其值。

2.9K30

《coredump问题原理探究》Linux x86版3.5节栈布局之-fomit-frame-pointer编译选项

test运行前,栈顶指向着main函数返回地址ret1 2.      test函数执行,把桢指针fp1压入栈,并设置桢指针 3.      ...也就是说,即使不用单链表规律,只要看一下ret2所函数分配局部变量空间大小,压入参数大小,桢指针大小,返回地址ret2大小,用addr(ret2)加上这个局部变量空间,参数,桢指针大小,返回地址大小就应该是...那么,同样使用了-fomit-frame-pointer情况下,上面5步,就会少掉第2步,也就是说,addr( ret1 ) - addr(ret2)= 0x34 + 4(返回地址大小)。...即相邻两个返回地址ret1, ret2, ret1 > ret2, 假设ret2所函数分配局部变量空间var_size, 压入ret2前,压入参数大小par_size,那么,addr( ret1...-fomit-frame-pointer编译选项生成程序里,栈布局有这样规律: 两个相邻返回地址ret1,ret2,其中ret1属于函数func1,ret2属于函数func2,且func1调用func2

61720

Linux下GDB调试器常用指令

) 使程序指定代码上暂停执行,便于观察 单步执行程序,便于调试 查看程序中变量变化 动态改变程序执行环境 分析崩溃程序产生core文件 2....常用调试命令参数 调试开始:执行gdb [exefilename],进入gdb调试程序,其中exfilename要调试执行文件名,以下命令后括号内命令简化使用,比如 run(r),直接输入命令...查看函数调用栈帧和层级关系 frame(f) #切换函数栈帧 info(i) #查看函数内部局部变量数值 finish #结束当前函数,返回到函数调用点 continue(c) #继续执行 print...(p) #打印值及地址 quit(q) #退出gdb break + num(b) #某行达断点 info + breakpoints #查看当前设置所有断点 delete + breakpoints...num(d) #删除第num个断点 display #跟踪查看具体变量值 undisplay #取消跟踪观察变量 watch #被设置观察点变量发生修改时,打印显示 i watch #显示观察点

1.7K20
领券