CLion安装、配置、使用、调试(完全小白向)

目录

Step0 CLion是啥

Step1 安装

Step2 配置

2.1 编译器选择

2.2 编译器配置

2.3 新建项目

2.4 CMakeLists

2.5 *头文件

Step3 使用

3.1 新建源文件

3.2 编译并运行

3.3 修改源文件名

3.4 删除源文件

Step4 断点调试

4.1 变量

4.2 *汇编

4.3 内存

4.4 单步调试

4.5 循环调试技巧

Step5 *What's More?


Step0 CLion是啥

在同学向我吐槽codeblock多么难用于是我疯狂安利CLion的时候,他发出了灵魂的拷问——“CLion是啥?”

CLion和codeblock一样都是可以编写C/CPP的IDE(集成开发环境),CLion的优点多多,尤其是CLion对小白非常友好。

  • 配置简单:只需要点几下鼠标就可以完成编译器配置。
  • 语法查错:很多语法错误可以在编译之前就报错并标注出来。
  • 潜在问题警告:如可能出现的死循环,野指针,数组越界,全局变量和局部变量同名等。
  • 调试方便:可以查看变量情况,内存情况,对应汇编指令。
  • 更加智能的自动补全
  • 统一代码风格:设置代码风格后,会自动标注并纠正,有助于小白养成良好习惯。

那么,代价是什么?CLion的缺点同样明显:巨能吃内存,随随便便打开一个项目就能占用内存到1G;性能开销很大,我的配置是137k+96G内存,在重新加载cmake或切换编译器时,都会有非常明显的卡顿。

本文章不涉及任何C/CPP基础知识,以下带“*”记号表示可选项。

Step1 安装

此处以Windos10/11为例,下载地址:Download CLion: A Smart Cross-Platform IDE for C and C++ (jetbrains.com)

下载后双击安装,一直点击next即可。

可自行选择其他安装路径。

如果不了解各项含义,可以直接全部勾选。

Update PATH Variable:加入到系统环境变量中,建议勾选。
Create Associations:关联默认应用,勾选后,对应的文件后缀将默认用CLion打开。

成功安装后,无须打开CLion,直接进行破解。
链接放在评论区,链接失效请私信或评论。
(P.S. 正常jetBrain可以通过学生认证来获取一年的免费使用,但由于学校在制裁名单上......)

Step2 配置

2.1 编译器选择

CLion自带MinGW11.0(GCC/G++13.0.0),也可以另行安装MinGW6.0(GCC/G++8.1.0)或VS17.0(MSVC1937),本文仅以自带的编译器为例。

2.2 编译器配置

打开CLion,找到“Customize”,点击“All settings...”。

找到“Build, Execution, Deployment”,点击“Toolchains”。

点击右侧窗口中左上的加号“+”,选择“MinGW”,其余内容自动补充完整。

接着,点击左侧“Toolchains”下方的"CMake",同样点击右侧窗口中左上的加号“+”,出现“debug”,其余内容自动补充完整。

点击右下角“Apply”,完成编译器配置。

2.3 新建项目

找到“Projects”,点击“New Project”。

C在左侧选择“C Executable”,右侧选择创建项目的路径和名称(强烈建议全英文),语言标准推荐C11。
C++在左侧选择“C++ Executable”,右侧选择创建项目的路径和名称(强烈建议全英文),语言标准推荐C++17。

2.4 CMakeLists

创建项目后会自动进入到项目中,在左侧文件列表打开“CMakeLists.txt”,删掉原本内容,并复制粘贴如下内容:

C:

cmake_minimum_required(VERSION 3.26)

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C)

set(CMAKE_C_STANDARD 11)

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
foreach(file ${files})
    get_filename_component(name ${file} NAME)
    add_executable(${name} ${file})
endforeach()

C++:

cmake_minimum_required(VERSION 3.26)
get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} CXX)

set(CMAKE_CXX_STANDARD 17)

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
foreach(file ${files})
    get_filename_component(name ${file} NAME)
    add_executable(${name} ${file})
endforeach()

而后,右键“CMakeLists.txt”,点击“Reload Cmake Project”,就可以愉快地使用啦~

2.5 *头文件

新建一个文件夹:右键文件列表,依次点击“new”,"Directory",输入文件名,尽量只包含英文、数字、下划线。

在新建的文件夹中新建头文件:右键文件夹,依次点击“new”,"C/C++ Header File",输入名称和选择类型。
C选择“.h”,CPP选择“.hpp”;文件名只能包含英文、数字、下划线;注意红框内不打勾。

修改CMakeLists,在set下方添加:

include_directories(include)

重新加载CMakeLists。

Step3 使用

3.1 新建源文件

在左侧文件列表右键单击,依次点击“new”,“C/C++ Source File”,并输入名称和选择类型。
C选择“.c”,C++选择“.cpp”;文件名只能包含英文和数字;注意红框内均不打勾。
(P.S. 第二个不打勾是因为CMakeLists文件会在重新加载时,已自动将新建的源文件添加到Configurations中;如果再添加到targets,在编译运行其他源文件时,将看到“multiple definition of main”的报错,此时编译器会将两个源文件一起编译,而一个程序只能有一个main函数)

在新建文件中打出主函数,并右键"CMakeLists.txt",点击Reload Cmake Project,重新加载CMakeLists。

在下方蓝色进度条加载完后,点击左下角第一个图标CMake,看到提示[Finished]。

此时,看到右上方Configurations中出现了新建的源文件。

上图中,上方从左到右依次为:选择编译器,选择源文件,构造(用于项目打包整体编译,现阶段用不到),运行,调试。

3.2 编译并运行

随便写点东西,点击运行(快捷键Shift+F10),就可以在下方看到运行结果了。

3.3 修改源文件名

单击要修改名称的源文件,按下快捷键“Shift+F6”,修改名称,并点击"Refactor"。

重新加载CMakeLists,[Finished]后,发现右上源文件名也随之改变。

3.4 删除源文件

单击要删除的源文件,按下"delet",或右键单击并点击“delet”。

 确认删除。

Step4 断点调试

本节中以我写的Polland-rho算法为例(只是因为写的时候刚好写完这个,才不是因为懒),这是一个用来寻找大合数小素因子的算法,无需关心它是如何实现的。

首先在可能出现问题的地方开始处打断点,左键单击源文件的行号,出现红点,该行被标红。

而后点击“Debug”(快捷键Shift+F9),可以看到程序停在断点处。

4.1 变量

在"Threads & Variables"窗口中,按下快捷键“Alt+F8”,弹出计算器窗口,在该窗口中可以计算变量在各种运算下的值(甚至包括取址符!)。

输入表达式并按下回车,上图给出了变量n的地址。
每次运行时地址都会不一样,关于这点请去了解C/CPP。

4.2 *汇编

点击下方窗口中的“GDB”,输入“disas”(disassemble)并回车,即可看到AT&T汇编指令。

也可以改成Intel格式的汇编,输入set disassembly-flavor intel"并回车,在输入"disas"并回车。

GDB能做到的事情还有很多,也包括调试,但本文并不打算讨论这些。

4.3 内存

下方窗口点击“Memory View”,就可查看内存情况。

在4.1中我们看到变量n的地址是“0x5ffe30”,n的值是“39617”。此处我们同样输入“&n”并回车。

可以看到,变量n的地址确实是"0x5ffe30",但“39617”转换为16进制为“9a c1”,为什么内存里是反过来的?
关于这一点请去了解C/CPP,这是由于采用了小端序。

4.4 单步调试

回到一开始的"Threads & Variables"窗口,左上角有一些控制按钮,从左到右依次是:Rerun(Ctrl+F5),Stop(Ctrl+F2),Resume(F9),Pause(暂时用不上),Step Over(F8),Step Into(F9),Step Out(Shift+F8)。

Resume:继续运行程序直到遇到下一个断点。
Step Into:一步步执行,遇到子函数时,进入子函数内部,继续一步步执行。
Step Over:遇到子函数时,不会进入到子函数内部,直接执行完子函数;但在子函数内部有断点时,会停在断点处。
Step Out:直接执行完本函数,并跳回外层函数相应位置;但在函数内部有断点时,会停在断点处。

在没有子函数时,Step Into和Step Over作用相当。
调试到上图处时,下一句将进入到子函数“gcd( )”中,此时使用Step Over下一句为“if”条件句,"gcd()"被执行完;而使用Step Into将进入到“gcd( )”中,再使用Step Out又执行完了“gcd()”并跳回到下一句为“if条件句”。

4.5 循环调试技巧

使用Rerun,回到断点;此时使用Resume或Step Out可以发现,循环被执行了一次,程序又停在了断点处。
这就是循环调试的第一个技巧,在循环结构头部或尾部打断点,并使用Resume或Step Out实现执行一次循环;但需要注意的是,Resume的最后一次循环会直接运行完程序,而Step Out的最后一次循环会直接函数返回。

另一个技巧常被用在“for”循环中,右键断点并输入判断条件,相当于插入一个“if”判断句,只有满足条件时,才会在断点处停止。
和C/CPP规范不同,此处判断相等直接使用“a=b”而非“a==b”。

调试也是一门艺术,但本文并不打算深入探讨。

Step5 *What's More?

使用任何产品时(尤其是软件和电子设备)请学会使用说明书(RTFM=Read The Fxcking Mamual),并查阅有关教程(STFW=Search The Fxcking Web,对于软件而言可能是官方论坛或其他软件交流社区),在提问时能够正确地提问(这是另外一个深刻的话题了),最后在深入思考前请先动手试试。

因而想要深入了解CLion,最好的办法之一就是查阅官方文档:

CLion Documentationicon-default.png?t=N7T8https://www.jetbrains.com/help/clion/installation-guide.html

 对小白而言确实障碍重重,但也是必经之路;在这之前,或许就是本篇文章存在的意义。

猜你喜欢

转载自blog.csdn.net/annesede/article/details/133940779