Ubuntu下C/C++程序调试

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名称

值:更具具体情况指定

建立工程

运行&调试

3.多线程调试

4.多进程调试

发布了10 篇原创文章 · 获赞 1 · 访问量 517

猜你喜欢

转载自blog.csdn.net/qq_41468222/article/details/103409217