1.GDB
编译:
eg: gcc -g test.c -o test
运行:
eg: gdb test
GDB:命令
start <参数>:运行到main函数中第一行等待命令,通过continue继续运行
run <参数>:从头开始(从新)运行,断点等信息保存不变
break <行号>: 设置断点,eg:break <行号>
continue:运行到断点继续
step:单步进入
next:单步跳过
finish:跳出函数并等待
print <变量>:打印变量,eg:print data
display <变量>:跟踪变量,每次停下来都显示data的值,eg:display data
undisplay <变量>:取消跟踪,eg:undisplay data
set var <变量名>=<变量值>:设置变量值,eg:set var data=3
delete <断点号>:删除断点,eg:delete 1
info b:显示断点信息
list:显示程序文本
list <行号>:列出行号前四行和后五行,eg:list 18
where:查看当前运行位置
quit:退出gdb
2.VScode+CMAKE调试C++
1.安装VScode
2.电脑上安装工具,eg : sudo apt-get install
gdb
cmake
g++(对应的编译工具)
3.安装VScode插件:
C/C++
C++ Intellisense
CMake
CMake tools
CMake Tools Helper
点击下图按钮
搜索插件名,点击“install”
4.创建C++工程(单CPP,单文件目录结构)
VScode是按照文件夹管理工程的,所以先在外部创建文件夹,然后在VScode中添加文件夹
然后在VScode中按ctrl+shift+p快捷键调出VScode的命令行
输入Cmake:Quick Start,然后输入工程名,快捷创建MakeList.txt和main.cpp(也可以手动创建)
选择生成库还是可执行程序,这里选择可执行程序(第二个)
生成的MakeList.txt和main.cpp
然后选择编译器,如下图,输入CMake:Select a Kit,VScode会扫描本机上已经安装的编译器
选择一个编译器,这里选择第二个
安装cmake tool后,VScode下方会有如下工具栏
点击CMake(相当于cmake命令,生成Makefile),然后选择下图第一项(调试版本)
成功后会在${workspaceFolder}目录下生成build文件夹,其中包含生成的Makefile文件
然后点击下图build(相当与make命令),生成可执行文件
下图可执行文件
5.调试
点击左边虫子
点击下拉列表,点击Add Config(test),添加调试配置
悬着调试工具,采用GDB调试(本机上预先安装GDB)
生成下图launch.json文件,更改program,指明待调试可执行程序路径(此处已经更改),${workspaceFolder}代表刚开始创建的文件夹(test)路径
点击下图,开始调试
调试界面(已加断点)
左边从上到下依次为:局部变量值,函数调用栈,变量值监视(相当与gdb中的display,点击途中‘+’添加),断点信息
以上是单CPP文件及文件目录结构(但目前不能在VScode上直接运行,还可能需要其他配置),下面创建编译调试多CPP文件及多文件目录工程(VScode对于C++工程的支持不像其他IDE,比如Visual Studio那样,能够自动组织工程文件,VScode需要手动维护CMakeLists.txt文件,需要熟悉CMake基本语法)
5.创建C++工程(多CPP,多文件目录结构)
产靠但文件工程创建过程,手动创建各个目录和cpp文件和h文件,然后改写CMakeList.txt文件
CMakeLists.txt语法:CMakeLists.txt主要包含函数,变量和值
eg:
文件组织:
CMakeLists.txt:
cmake_minimum_required (VERSION 2.8)
project(Demo4)
set(CMAKE_CXX_COMPILER "g++")
set (CMAKE_CXX_FLAGS "-g -fexec-charset=GBK")
include_directories(${PROJECT_SOURCE_DIR}/Include)
aux_source_directory(./Src SrcFiles)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Bin)
add_executable(Demo4 ${SrcFiles})
语法:
1.判断:
if…elseif…else…endif
逻辑判断和比较:
if (expression):expression 不为空(0,N,NO,OFF,FALSE,NOTFOUND)时为真
if (not exp):与上面相反
if (var1 AND var2)
if (var1 OR var2)
if (COMMAND cmd):如果 cmd 确实是命令并可调用为真
if (EXISTS dir) if (EXISTS file):如果目录或文件存在为真
if (file1 IS_NEWER_THAN file2):当 file1 比 file2 新,或 file1/file2 中有一个不存在时为真,文件名需使用全路径
if (IS_DIRECTORY dir):当 dir 是目录时为真
if (DEFINED var):如果变量被定义为真
if (var MATCHES regex):给定的变量或者字符串能够匹配正则表达式 regex 时为真,此处 var 可以用 var 名,也可以用 ${var}
if (string MATCHES regex)
数字比较:
if (variable LESS number):LESS 小于
if (string LESS number)
if (variable GREATER number):GREATER 大于
if (string GREATER number)
if (variable EQUAL number):EQUAL 等于
if (string EQUAL number)
字母表顺序比较:
if (variable STRLESS string)
if (string STRLESS string)
if (variable STRGREATER string)
if (string STRGREATER string)
if (variable STREQUAL string)
if (string STREQUAL string)
2.循环
while…endwhile:
foreach…endforeach:
start 表示起始数,stop 表示终止数,step 表示步长,示例:
函数:
1.cmake_minimum_required():用于设置最低版本号要求, 需要放在文件最开头位置。
cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])
2.project():设置项目详细信息,例如名称,版本等,并启用语言
project(<PROJECT-NAME> [LANGUAGES] [<language-name>...])
3.set():用于设置变量的值
set(<variable> <value>... [PARENT_SCOPE])
4.aux_source_directory():收集指定目录中所有源文件的名称,并将列表存储在提供的变量中。
aux_source_directory(<dir> <variable>)
5.include_directories():指定头文件路径
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
6.message(<string>):打印信息
7.add_executable():该命令指定了将源文件输出到可执行文件 <name>
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
变量:CMakeFiles.txt包含系统变量和自定义变量,区分大小写,不用声明,使用${}引用变量值
1.PROJECT_SOURCE_DIR
: 整个项目的根目录,即包含PROJECT()的最近一个CMakeLists.txt文件所在的目录
2.PROJECT_BINARY_DIR
: Build路径,在这里就是 **、Demo1/Build
3.CMAKE_<LANG>_COMPILER:指定编译器eg:CMAKE_CXX_COMPILER(C++),CMAKE_C_COMPILER(C)
4.EXECUTABLE_OUTPUT_PATH:可执行路径输出路径
5.CMAKE_CXX_FLAGS:编译选项(库搜索路径,头文件路径等)
eg : set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_CURRENT_SOURCE_DIR}/libs")
6.CMAKE_SYSTEM:系統全名,如 “Linux-2.4.22″,”FreeBSD-5.4-RELEASE” 或 “Windows 5.1”
7.CMAKE_SYSTEM_NAME:系統名称,如 “Linux”, “FreeBSD” or “Windows”,注意大小写
8.CMAKE_SYSTEM_VERSION:只显示系统全名中的版本部分
9.CMAKE_SYSTEM_PROCESSOR:CPU名称
值:更具具体情况指定
建立工程
运行&调试