vs code 写C心得
用命令行的话可能比较简单:
g++ -o 【目标文件名】 【原文件名】
然后在当前路径下直接执行这个文件,查看程序执行结果
例如:
g++ -o a.out test.cpp
./a.out
默认是a.out ,可以自己更改。
————————————————————————————————————————
调试的话:一般也是需要launch.json tasks.json
需要更改的东西主要是tasks.json 命令的话必须加上“-g”在编译的时候,加入调试符号。
然后在launch.json中加一句:"preLaunchTask": "build"(tasks的标签)
举个例子🌰:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "gcc",
"args": ["-g", "-o", "a.out", "test.cpp"],
"group":{
"kind": "build",
"isDefault": true
}
}
]
}
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "\({workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "\){workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb",
"preLaunchTask": "build"
}
]
————————————————————————————————————————
不同于我们平常在命令行的编辑、编译、执行。通常说这种集成环境,都需要为每个项目,指定一个工作目录。不管你的项目是只有一行代码的实验小程序,还是包含上千个文件的大工程。
add之后,目录上层的工作区仍然是"UNTITLED",意思是“未命名”,因为实际上这个工程我们还没有命名。可以不管它,也可以在File菜单选择“Save Workplace As...”将工作区保存为一个文件,然后对文件取一个名字。
通常习惯上,一个工作区就是一组相关的项目,每个项目单独占用一个目录。
1、配置编译脚本
如果是比较大的工程,就需要自己维护编译过程了,随后通过配置build编译任务,跟vs-code连接在一起。
在屏幕最上面Tasks菜单中,有Run Build Task选项,第一次运行,就会提示你需要建立任务设置配置文件,并自动打开一个新窗口,给你一个基本的文件模板。这个配置文件名字是tasks.json,对于新手,你可以先不了解过多,在下面这个模板上简单改改就好了(系统自动给出的模板有点偏简单,需要你修改的地方比较多):
通常只有中部的command及args两个选项需要你改,你能看出来当前实际上是调用gcc命令来编译test.c文件,你可以根据你的工程修改成其它的方式。修改完成存盘后,下次再从菜单选择Run Build Task就可以直接执行脚本,把你的代码编译完成了。
如果你想通过菜单[任务]->[运行生成任务...]或快捷键(Ctrl+shift+B)build代码,需要在刚才的文件tasks.json添加组build,如下,这样就可以build代码生成可执行的文件了
2、调试配置
在Mac,调试通常就是指使用gdb或者lldb进行程序调试。不过一直做服务器端的程序,这个功能我也用的很少。
配置方法是这样,在Debug菜单选择Add Configurations,同样会新打开一个窗口,并给你一个基本的模板,这个模板基本算可以直接用了。只要在program一节后面修改成"${workspaceFolder}/你编译后的可执行文件名"这种形式存盘就可以使用了。下面是我用的一个模板:
加一句:"preLaunchTask": "build"
免得还要在菜单栏:terminal - run task
以后想调试程序,只要菜单选择Start Debug,或者F5快捷键,都可以开始调试。
vs-code的c/c++插件的调试有一个坑需要注意,就是你使用的默认shell环境必须是bash,因为这个插件依赖了大量的直接脚本来调用系统调试程序及返回运行结果。如果是使用了跟bash兼容性不佳的其它环境,比如fish,则调试程序即便设置正确也无法启动。
————————————————————————————————————————
linux执行自己写的脚本,程序为什么要用 ./ 来执行 ?
因为有环境变量PATH,里面包含了许多目录,这些目录下的可执行文件就无需输入完整路径来执行。
你可以用 echo "\(PATH"查看当前的环境变量包含的目录,自带的命令文件都是在PATH 中的,所以可以直接使用。
./代表当前目录,由于自己编写的脚本就在当前目录下,而当前目录不在环境变量中,所以得输入包含完整目录的文件名。例如\) ./xx.sh 或者 $/home/xxx/xx.sh
————————————————————————————————————————
In VS Code, there are two core concepts for debugging: Launch and Attach, which handle two different workflows and segments of developers. Depending on your workflow, it can be confusing to know what type of configuration is appropriate for your project.
if you come from a server or desktop background, it's quite normal to have your editor launch your process for you, and your editor automatically attaches its debugger to the newly launched process.
The best way to explain the difference between launch and attach is think of a launch configuration as a recipe for how to start your app in debug mode before VS Code attaches to it, while an attach configuration is a recipe for how to connect VS Code's debugger to an app or process that's already running.
————————————————————————————————————————
(四) 调试选项
对于Linux程序员来讲,gdb(GNU Debugger)通过与 gcc 的配合使用,为基于Linux的软件开发提供了一个完善的调试环境。常用的有:
(1) -g 和 -ggdb
默认情况下,gcc 在编译时不会将调试符号插入到生成的二进制代码中,因为这样会增加可执行文件的大小。如果需要在编译时生成调试符号信息,可以使用 gcc 的 -g 或 -ggdb 选项。
gcc 在产生调试符号时,同样采用了分级的思路,开发人员可以通过在 -g 选项后附加数字1、2、3指定在代码中加入调试信息的多少。默认的级别是2(-g2),此时产生的调试信息包括:扩展的符号表、行号、局部或外部变量信息。
级别3(-g3)包含级别2中的所有调试信息以及源代码中定义的宏。
级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储。
回溯追踪:指的是监视程序在运行过程中函数调用历史。
堆栈转储:则是一种以原始的十六进制格式保存程序执行环境的方法。
注意:使用任何一个调试选项都会使最终生成的二进制文件的大小急剧增加,同时增加程序在执行时的开销,因此,调试选项通常仅在软件的开发和调试阶段使用。
(2) -p 和 -pg
会将剖析(Profiling)信息加入到最终生成的二进制代码中。剖析信息对于找出程序的性能瓶颈很有帮助,是协助Linux程序员开发出高性能程序的有力工具。
(3) -save-temps
保存编译过程中生成的一些列中间文件。
gcc test.c -o test -save-temps
除了生成执行文件test之外,还保存了test.i 和 test.s 中间文件,供用户查询调试。
(五) 交叉编译选项
通常情况下使用 gcc 编译的目标代码都与使用的机器是一致的,但 gcc 也支持交叉编译的功能,能够编译其他不同CPU的目标代码。
使用 gcc 开发嵌入式系统,我们几乎都是以通用的PC机(X86)平台来做宿主机,通过 gcc 的交叉编译功能对其他嵌入式CPU的开发任务。
(具体的选项设置,此处省略)
作者:delphiwcdj
来源:CSDN
原文:https://blog.csdn.net/delphiwcdj/article/details/6555073
版权声明:本文为博主原创文章,转载请附上博文链接!