01 2024 档案
摘要:一、核心转储coredump基础 Linux core dump:一般称之为核心转储、内核转储,我们统称为转储文件。是某个时刻某个进程的内存信息映射,即包含了生成转储文件时该进程的整个内存信息以及寄存器等信息。转储文件可以是某个进程的,也可以是整个系统的,可以是进程活着的时候生成的,也可以是进程或者
阅读全文
摘要:调试代码如下所示: #include <thread> #include <iostream> #include <vector> #include <mutex> using namespace std; mutex _mutex1; mutex _mutex2; int data1; int d
阅读全文
摘要:一、服务器端/被调试机器 安装gdbserver: 启动gdbserver: 二、客户端/调试机器 客户端远程连接: 服务端收到客户端的调试连接: 三、程序未启动前进行调试 客户端调试信息: 服务端程序运行信息: 四、程序启动后进行调试 先在服务端查找运行程序的进程id,然后使用gdbserver通
阅读全文
摘要:一、内存泄漏检测 内存泄漏检测常用命令: call malloc_stats() call malloc_info(0, stdout) 调试代码如下所示: #include <malloc.h> #include <string.h> #include <thread> #include <ios
阅读全文
摘要:一、制作release版本的方法 编译生成带有调试信息的可执行文件,使用strip -g 带有调试信息的可执行文件名称 -o 去除调试信息的可执行文件名称(例如:strip -g release-section -o release) 二、GDB调试release版本方法 1.使用命令:gdb --
阅读全文
摘要:调试代码下载地址 skip命令的使用: 跳过多个函数:
阅读全文
摘要:常用命令: p表达式:求表达式的值并显示结果值。表达式可以包括对正在调试的程序中的函数的调用,即使函数返回值是void,也会显示。 call表达式:求表达式的值并显示结果值,如果是函数调用,返回值是void的话,不显示void返回值。 调试代码如下: #include <iostream> #inc
阅读全文
摘要:一、调试子进程 正常在子进程某处打入断点后,然后执行可以发现,程序并不会在断点处中断下来,而是会继续执行直到程序结束。 调试代码如下: #include <iostream> #include <fstream> #include <string> #include <sys/types.h> #i
阅读全文
摘要:反向执行常用命令: record rn(reverse-next) rc(reverse-continue) reverse-finish record stop 测试代码: #include <iostream> #include <cstring> using namespace std; in
阅读全文
摘要:跳转执行即跳转到指定位置去执行代码,也就是不按照正常的执行顺序往下执行代码而是跳过某些代码或者重复的反复的执行某些代码。这是非常有用的,假如不小心错过了观察某个函数的执行或者错过了某个重要的代码,可以通过jump命令重新执行一遍相关的代码。 jump命令语法如下所示:jump location(j
阅读全文
摘要:相关命令如下所示: shell/!:执行shell命令 set logging on/off:启用/禁用结果输出 set logging file filename:设置输出文件 set logging overwrite:覆盖输出文件,默认为追加 shell命令的使用: 启用/禁用结果输出: 设置
阅读全文
摘要:一、线程管理相关命令的介绍 info threads:查看所有线程信息 thread find:查找线程 thread num:切换线程 thread name:设置线程名字 b breakpoint thread id:为线程设置断点 thread apply:为线程执行命令 set schedu
阅读全文
摘要:查看变量类型信息常用命令: whatis ptype /r /o /m /t i variables set print object on 调试代码下载地址 whatis命令的使用: ptype命令的使用: 查找指定变量在什么地方:
阅读全文
摘要:多窗口管理常用命令: layout src:显示源码窗口 layout asm:显示汇编窗口 layout reg:显示寄存器窗口 layout split:切分窗口 focus src/asm/reg:切换窗口焦点 info win:查看当前拥有焦点的窗口 ctrl+x+a:退出窗口模式 显示源码
阅读全文
摘要:调试代码下载地址 断点执行命令commands的使用: 为指定断点设置断点执行命令: 保存和导入断点的设置信息:
阅读全文
摘要:一、什么是捕获点 捕获点是一个特殊的断点,命令语法为:catch event,即捕获到event这个事件的时候,程序就会中断下来。 测试代码示例如下: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <
阅读全文
摘要:一、什么是观察点? 观察点是一个特殊的断点,当表达式的值发生变化时,它将中断下来。表达式可以是一个变量的值,也可以包含由运算符组合的一个或多个变量的值,例如'a+b'。有时被称为数据断点(VC里面就称之为数据断点)。 二、观察点常用命令 watch:写观察点 rwatch:读观察点 awtach:读
阅读全文
摘要:栈帧:当程序进行函数调用的时候,比如说在哪里调用,这些信息我们称之为栈帧。每一个栈帧的内容包括调用的参数,局部变量,寄存器等这些信息,这就是一个栈帧。 调用栈:所有栈帧组成的信息称之为调用栈,或者我们也可以称之为调用堆栈。栈的特性是后进先出,函数调用也是这样,如果函数1里面调用了函数2,函数里面又调
阅读全文
摘要:一、源代码查看命令 显示源代码:list or l,默认显示10行(在当前行往后5行,以及往前5行,总共10行代码) 设置每次显示的行数:set listsize xx 查看指定函数代码:list test_fun 查看指定文件指定行代码:list main.cpp:15 显示源代码: 查看指定函数
阅读全文
摘要:一、寄存器查看命令 命令:"i register"查看所有的寄存器,如果只想查看指定的寄存器,则使用"i r 寄存器名称",如"i r rdi",寄存器的名称列表如下所示: 函数参数低于六个的时候,会把参数放在寄存器中,当函数参数高于六个参数的时候,就不会把参数放在寄存器中,而是放在函数栈中。 调试
阅读全文
摘要:一、查看变量内存和内存中的值 调试代码下载地址 命令语法:x /选项 内存地址 调试代码示例: #include <iostream> #include <cstring> using namespace std; struct test_struct { char name[12]; char g
阅读全文
摘要:一、查看函数参数 调试代码下载地址 使用命令"p 参数名称"可以查看指定参数的值,如果想一次性查看函数的所有参数,可以使用命令"info args"或者"i args"即可。 代码中有一个test_work函数,在这个函数处设置一个断点,然后查看此函数的参数信息: 二、查看变量的值 三、设置字符串的
阅读全文
摘要:一、为代码行设置断点 调试代码下载地址 比如说在文件main.cpp的38行和46行分别设置一个断点: 使用run命令继续向下执行,会在38行断点处停下来,接着使用c命令继续执行,将会在46行断点出停下来。 二、为函数设置断点 比如说为函数testfun()设置断点: 从上面可以看出,在两处设置了断
阅读全文
摘要:一、启动调试并传入参数 调试代码如下所示: #include <iostream> int main(int argc, char** argv) { int iTest = 100; const char* str = "this is a test"; std::cout << "iTest i
阅读全文
摘要:一、C++调试准备工作 调试代码下载地址 调试代码: #include <iostream> int main(int argc, char** argv) { int iTest = 100; const char* str = "this is a test"; std::cout << "iT
阅读全文