CLion学习笔记

2020年更新:

被茗哥教育了一顿”CV工程师”后,突发奇想想把以前的文章都整理一下,就从这博客的第一篇文章,也就是大一刚开始接触的工具开始吧。当时比较菜,什么也不会,也是大佬带着一步一步走过来的(虽然现在也很菜),现在看这篇文章,感觉又多了不少想补充的东西,就慢慢写吧。名字就叫学习笔记了,如果有错,欢迎指正。

对于刚入坑程序设计学习C/C++,还是建议上手工具 CLion 或者 Visual Studio,静态代码补全界面美观代码补全,一系列的快捷键和插件都是挺香的。CLion刚开始的时候可能会难上手一点,最近已经出了中文插件,刚开始接触的时候可能就可以比较好理解一点了(但仍然不推荐使用中文插件)。JB家整套工具不是免费的,但是对学生免费,有学生邮箱可以直接申请,建议安排一波JB全家桶。

至于老师甚至部分学长学姐推荐的DevC++甚至VC6.0的IDE,都2020年了,还不给自己整一套阳间的工具吗?

最后的最后,特别鸣谢小茗大佬在大一带我学习,我的大部分参考也源自于他的博客(你又开始CV了?):关于CLion的基本的安装和配置建议

申请教育版版权

进入JetBrains官网,申请 Free Educational Licenses

申请学生授权需要学生邮箱,在大部分的学校内网都可以整到。

接着下载 Toolbox App,JB家的工具集成,可以快速的下载更新JB家的工具以及最近打开过的项目,然后在盒子里 download CLion 即可。

配置Toolchain

CLion需要手动配置工具链才能运行项目,工具链的种类有很多种,包括但不限于WSL(子系统,以及最新的WSL2我还没有试过)、MingW(注意是MingW-W64,与32位区分开来,当然如果你是32位的电脑,当我没说)。

Linux (WSL) on Windows 10

本人极懒,没有复现,这里建议直接看茗哥博客了,链接在上面,有兴趣访问原站(强烈建议)。

Minw-w64

可以直接进入官网下载mingw-w64

在线下载。记住下载后的路径,Toolchain配置上即可。

一些相关的配置环境

Toolchain配置

ConfigureSettingBuild,Execution,DeploymentToolchains。添加MinGW,添加下载的minW-w64路径(或WSL)。

如上图即配置成功。

WSL同理,将toolchains指向ubuntu.exe。

New project 创建新项目。

第一次启动会花较长时间配置Cmake。下方出现Finished即为成功。

快捷键 shift F10 运行(或者右上角的绿色三角形)。

安装插件

进入 Clion→Configure→Plugins下载插件。

这里给出一些比较推荐的插件。

CodeGlance:滚动条左侧的代码缩略图,方便快速定位代码位置。

Material Theme UI:插件的主题样式来代替CLion自带的主题样式。

Presentation Assistant: 演讲助手,可以回显操作步骤(使用的快捷键)。

安装完后 restart IDE。

另:一些常用的快捷键/方法

快捷键

Ctrl+Shift+Enter: 快速完成if、do-while等语句的补充。例如给if语句填上花括号。

Ctrl+/ :行注释,可选中大片段落注释。

Ctrl+Shift+/ :块注释,同上。

Ctrl+Alt+L:CLion风格(可改风格)快速格式化代码。可以通过格式化代码来学习代码的格式规范。不要太依赖于格式化代码。

Ctrl+D:重复一行。

Ctrl+Alt+T:选中一段代码后,用其将代码被例如if语句快速围绕。

Alt+Enter:快速修复警告和错误。也可以通过小灯泡或右击代码 Actions… 修复,无脑必备。

Shift+F6:重构。将定义域内的同一变量统一重命名。

Double Shift:快速搜索例如Plugins\Scemes等功能位置。

方法

Search with Google:选定文字,右击启动搜索功能。

Compare with Clipboard:同上,用来比较两段文本的差别,打OJ题目核对样例输出的时候比较好用。

Warming Error 提示

静态代码检查:出现警告的代码下方画黄线,出现错误的代码下方画红线(可自定义颜色)。

例如没有分号时:

鼠标瞄到红线上方可以查看错误提示;或者直接用快捷键 Alt+Shift+Enter 让Clion对你出错的代码进行快速修复;或者点击左边的小灯泡,提示你如何修复代码。

一些常见问题

中文路径

不管是Project还是Toolchains均不能以中文路径/中文文件来命名,否则无法编译,产生一堆奇怪的报错。

安装配置这么麻烦/考试的时候机房没有环境?

(深大特供)我大一年的时候是直接带U盘,里面放了CLion的安装包以及MingW工具链(当然不可能现场配一个子系统),提前到考场安装,整个配置流程应该也不会超过十分钟吧。

部分老师会比较佛,如果你问他能不能自带IDE,都会说随便;有的老师管得比较严格,不让带U盘,比如我大一下半年的老师,不过在考试的时候我还是斗胆带了U盘,老师发现了也没有说什么,只要不要在U盘里面装一些奇怪的代码(虽然我觉得装了也没用)就好。

不过现在都2020年了 猛男应该用这个 信安协会在内网里面的FTP地址:http://ftp.szu.moe/,在内网直接访问,在里面下载工具链和CLion就可以了。

关于Debug

debug 在写代码中几乎是一个必不可少的工具(如果是一遍 ak 的巨佬当我没说),肉眼 debug 花的时间大多情况下甚至比写出来还多……然鹅深大的老师好像也没怎么讲debug(至少我是没听过),所以就写点关于 debug 的只是一些比较初级的技巧。

通过打下断点,可以让程序在debug时停在断点的位置而不是一次性的跑完全部程序,通过一步步判断观察bug的位置。

环境是 CLion 2019.2.5 + mingw-w64 ,至于怎么用 Codeblocks 或者 DevC++ 甚至是VC 6.0,那不好意思我也没试过(滑稽.jpg)。

题目

写一个find函数,先后输入数组和需要查找的值,如果找到该数,返回并输出该数的下标。

第一行输入数组的大小;

第二行依次输入数组的元素;

最后一行输入待查找的元素。

来一段bug程序。

IN
5
1 2 3 4 5
3
OUT
3

按理应该是2而不是3的……哪里有问题呢?

breakpoint(断点)

在准备让程序停下的地方打下断点。

CLion中实现的方法为在代码左边单击即可。

一个红色的断点。

debug(调试)

在右上角工具栏。run的旁边一只红色的虫子就是debug;或者用快捷键Shift+F9

在控制台输入数据之后,程序自动到该停止的地方停下。

此时有:

静态 debug

Console(控制台)

控制用户的输入和输出,显示在console上。

Debugger(调试器)

显示当程序到达该点时的各个变量(包括类的各种变量、外部变量等当前步骤可访问的变量)。

可以清楚的看到数组大小为5,输入的变量为3,数组第一个值为1。

且随着 debug 的的进行,调试器中的变量也实时更新

关于 Debugger 右边的工具栏(这里的功能比较少用到)。

  • New Watch(Insert):添加变量
  • Remove Watch(Delete):删除变量
  • Move Watch Up:向上移动
  • Move Watch Down:向下移动
  • Duplicate Watch:复制变量
  • Show Watches in the variables tab:独立开出Watches框查看变量。

最后是这个极为强大的功能:

Evaluate Expression

想必都应该用过 google 游览器自带的控制台吧?Evaluate与其类似。

Alt + F8 打开或者直接在控制台边打开。

主要功能(包括但不限于):

查看变量值

输入变量值,Evaluate 返回变量的值。

表达式的计算

可以写入一些表达式,比如:

简单的加减乘除

判断(结果返回 bool 值)

修改变量的值

比如++index

同时debugger中变量也会发生变化

总之还是要慎用……修改关键变量可能会导致程序运行结果不同甚至错误

动态 debug

当程序到了断点处停下后,通过静态debug 你可以查看各种变量,那么当发现程序运行到这里没有问题之后,如何到下一步?重新打一个断点再 debug?

Step Over

跳过,进入下一步。

F8 或者在控制台或者在页面上方的Run找到Step Over。

运行 debug,到断点处:

F8跳到下一步:

可以看见调试台以及页面更新了flag的值,各个变量都更新到了第19行。

一直 step over 可以跟踪进度直到进程结束。

那么问题来了:flag的值是函数的返回值,其计算过程是在函数内,如何查看函数内的运算过程?

Step Into

跳入函数

如图所示,当程序运行到第18行时:

F7 或者在控制台或者在页面上方的Run找到Step Into。

跳入函数:

如图所示,跳入函数,同时调试器的变量自动变为了在函数定义域内的变量。

接下来使用Step Over, 在函数内进行debug,很容易可以发现为什么返回值是3不是2(在找到目标值之后又进行了一次自增操作)。

注:Step Into在不跳入函数时使用效果类同于Step Over,但也有例外(例如跳入stl_stack.h或stl_vector.h)。

上面两种功能是比较常用到的,还有一些不常用到的:

Step Out

跳出函数。

Run to Cursor

跳到下一个断点。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇