vscode只能调试英文名的文件吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode只能调试英文名的文件吗相关的知识,希望对你有一定的参考价值。

参考技术A 调试是一个发现程序错误非常好的办法。小程序手动print或许还有点用,大型程序出错想要定位就非常困难了,调试器就能够帮助我们很快找到程序出问题的地方。

首先,当然也需要一个程序来执行调试任务,我们称之为调试器(debugger)。gcc系的编译器对应的调试器是gdb;intel编译器似乎没有调试器,不过也可以用gdb调试。linux下通常都有gdb,windows安装了MinGW-w64组件也包含了gdb,一般不需要特别安装。

GDB(the GNU project debugger)最基本的使用方式是命令行,但是最方便的使用方式还是结合一个编辑器,提供一些可视化的操作。下面以fortran语言为例,介绍使用VScode作为可视化前端,使用gdb调试的基本方法。

VScode当然还可以调试c/c++/fortran之外的语言,不同的语言使用不同的调试器罢了,基本的操作都是一致。

必要的插件
需要安装插件:C/C++(ms-vscode.cpptools),Modern Fortran(krvajalm.linter-gfortran)。其中C/C++提供对接gdb的接口,Modern Fortran提供基本fortran语言支持和断点调试支持。(以前需要Fortran Breakpoint Support插件提供断点支持,现在Mordern Fortran也集成了。)

使用方法
首先,在调试开始之前,需要编译生成可执行文件。对于需要调试的程序,必须加上-g编译选项,这样编译得到的可执行文件具有一些调试附加信息,才能够进行调试操作。比如

gfortran test.f90 -g -o test.exe
然后,在菜单栏点击:运行->添加配置,在弹出来的窗口选择c++(GDB/LLDB)。

虽然看到的是c++,请不要担心。重要的是gdb,它能够调试c/c++/fortran等一系列gcc系编译器能够编译的语言。

此时会在当前目录下的.vscode文件夹下自动生成一个lanuch.json文件(也可以不点击,手动创建)

"version": "0.2.0", "configurations": [ "name": "(gdb) 启动", "type": "cppdbg", "request": "launch", "program": "$workspaceFolder/test.exe", "args": [], "stopAtEntry": false, "cwd": "$fileDirname", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "gdb", "setupCommands": [ "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true ] ]
一般来说仅需要修改两个地方:"program"字段,修改成你需要调试的可执行文件;"miDebuggerPath"修改成你的gdb的位置,如果gdb已经在环境PATH中,也可以直接填gdb。

调试界面
在编辑器中,你想要设置断点的地方,在行号前点击设置断点,接下来就可以开始调试了。点击菜单栏:运行->调试,或者直接用快捷键F5开始调试。你会得到如图所示的界面


注意如果没有设置断点就会直接运行结束,看不到类似的图。另外还有一个小trick是右键点击断点是可以编辑的,你可以给断点添加一个条件表达式,只有当满足设定条件时调试器才会停在该断点。

基本操作
首先介绍一下编辑区出现的几个按钮,从左到右依次的功能是:

继续:继续运行直到下一个断点,如果没有下一个断点则继续运行直到程序结束。
单步跳过:点一下运行当前行代码,并把高亮标志移动到下一行。如果当前行是一个函数,运行整个函数,而不会进入函数内部。
单步调试:真正的运行一步。如果当前行是普通代码,和单步跳过一样。如果当前行有函数,则会跳入函数体内部。
单步跳出:直接跳出当前函数体。
重启:重新开始调试。
停止:中止当前调试。
监视
然后是左边的几个监视窗口。

变量:调试光标所在的地方,其作用域内所有能够访问的变量列表。
监视:自己添加一些表达式,监视当前表达式的值。比如 a, x + 1, x * y + z等等。
调用堆栈:当前函数所在的位置。比如上面的图中,由于fac是一个递归函数,当前的位置实际上在好几层递归之中,因此我们看到堆栈内有很多的fac。
断点:在编辑器上打上的所有断点。
图上最下面两个是我装的其他插件的东西,和fortran无关。

调试的基本作用
监视程序的运行。在代码特定处添加print是人们常用的一种寻找错误的方法,但是这太低效了,用完之后还要删掉添加的print语句。而使用调试器你可以看到任意时刻所有的变量,更快速的找到不符合预期的变量。
捕捉异常。对于c++这样有异常机制的语言,调试器还可以在发生异常的地方自动停下来,即使你没有添加断点。fortran没有异常机制,但是在某些内存溢出的情况也可以出发类似的异常捕捉效果。此时,借助调用堆栈的信息,你就能够很快确定异常发生的位置。
剩下的,就是结合具体程序,灵活使用上述功能定位错误了。

以上是关于vscode只能调试英文名的文件吗的主要内容,如果未能解决你的问题,请参考以下文章

C语言文件名行号函数名的方法

zc706调试ddr3只能用vivado吗

变量名的力量

amp在c语言中需要提前定义吗

C语言中变量名有啥要求

7 基础测试阶段