
调试
文章平均质量分 84
麦兜c
多少事,从来急,天地转,光阴迫,一万年太久,只争朝夕。
展开
-
C/C++调试---调试工具
在软件开发过程中,我们不可避免地会遇到各种性能问题、系统故障或其他预料之外的挑战。要有效地诊断和解决这些问题,选用合适的工具是关键。下面介绍3个出色的Linux性能分析和调试工具的世界:strace、Perf以及eBPF。原创 2025-01-12 17:49:17 · 861 阅读 · 0 评论 -
C/C++调试---内存调试工具
作为内嵌内存调试的典型例子,glibc内存管理器ptmalloc实现了一个基于填充的简单且非常有用的调试特性。我们可以通过将环境变量MALLOC_CHECK_设置为非零数值来启用它。该值的最低两位决定了ptmalloc在检测到错误时应采取的操作:如果最低位设置了(例如1),那么每次检测到错误时都会在stderr上打印出错误消息,如果不考虑最低位,第二低位设置了(例如2),那么只要核心转储打开,ptmalloc就会在检测到错误时终止进程并生成一个核心转储文件。原创 2025-01-12 17:15:22 · 324 阅读 · 0 评论 -
C/C++调试---调试多线程程序
多线程程序对调试确实提出了一些独特的挑战。线程安全和线程争用等问题通常表现为间歇性且不可预测。多线程程序的行为会受到众多因素的影响,如系统配置(例如CPU的数量)、IO速度(例如网络和文件服务器的性能)以及系统负载等。这些环境条件通常是短暂的,因此复现问题可能会相当困难。线程问题有多种表现形式,。原创 2025-01-12 14:45:13 · 374 阅读 · 0 评论 -
C/C++调试---进程镜像
同时,它也为文件的其他部分提供了总体的结构描述。ELF头的具体数据结构可以在头文件elf.h中找到。原创 2025-01-12 12:12:24 · 1931 阅读 · 0 评论 -
C/C++调试---汇编2
最后一条指令负责读取虚函数表中偏移32字节(0x20)的条目并跳转至其中的地址,该地址是派生类的虚函数的实现。然而,读取分配在寄存器中的局部变量和参数的正确值会比较有挑战,因为它们可能会在某些地方被临时保存、占用,然后恢复,这在优化的代码中相当常见。该指令的操作数为被调用函数的地址。它从位于-64(%rbp)的数组中读取元素,每个元素的大小为8字节,元素索引在%rax中。这对应类似的代码arr[i],其中arr的起始地址为-64(%rbp),i存储于%rax中,数组元素大小为8字节,比如long。原创 2025-01-09 22:23:09 · 930 阅读 · 0 评论 -
C/C++调试---汇编
前面提到leave指令等同于两条指令——mov rbp、rsp和pop rbp,它与序言正好相反,它首先恢复栈指针,然后将前一个帧寄存器rbp的值弹出栈。注意,pop指令会将栈寄存器rsp隐式地调整8字节(32位模式下为4字节),这会将rbp和rsp完全恢复为先前栈帧的值。ret指令弹出下一条要执行的指令的地址,并将它设置到程序计数器寄存器rip。这为线程在完成此函数调用后继续运行做好准备。用户代码生成的指令很大一部分是对数据的读取或修改。原创 2025-01-08 22:10:57 · 2286 阅读 · 0 评论 -
C/C++调试---C++对象布局
结构体的对齐要求是所有单个字段中的最大要求。数组的对齐要求与数组中每个元素的要求相同。如果复合类型具有多个层级,那么这些规则适用于所有层级。在所有的字段中,字段d的对齐要求最大,为8字节。因此,这个结构体aggr_type需要按8字节对齐。它同时也需要一些填充,从而确保每个字段满足对齐要求。字段c一共有3字节的填充,字段s有6字节的填充。这些填充使得紧接的字段i和字段d相应地对齐在需要的4字节和8字节上。当编译器为栈分配变量时,会确保每个变量,无论是原始类型还是复合类型,都满足其对齐要求。原创 2025-01-07 22:51:12 · 884 阅读 · 0 评论 -
C/C++调试---内存损坏
内存损坏通常指代码覆写一块不属于自己的内存,或者即使内存属于改写者,但错误的写操作导致内存数据超出有效范围。内存损坏可能是我们需要调试的最棘手的问题之一。主要原因在于这类问题的发生、传播和爆发具有随机性。通常在问题发生的时刻或地方不会有什么症状,被损坏的数据要么深深潜伏在其他数据结构中,要么沿着控制流传播到很远,直到很久以后程序在看似毫不相关的地方崩溃。就是由内存损坏导致的程序崩溃是内核确定程序在访问无效内存时采取的措施。原创 2025-01-06 22:47:06 · 340 阅读 · 0 评论 -
C/C++调试---堆数据结构
C/C++调试---堆数据结构 ptmalloc原创 2025-01-05 10:54:13 · 2106 阅读 · 0 评论 -
C/C++调试---调试符号与调试器
c/c++调试原创 2025-01-05 09:21:25 · 551 阅读 · 0 评论