GDB
CV_ML_DP
赏cv,ml,dp之美,创其价值
展开
-
用gdb脚本解决死锁的调试方法(由pthread_mutex_lock引起的死锁)
首先给出gdb定位死锁的脚本:#deadlock_debug_gdb.cmdset pagination off set logging file gdb.logset logging overwriteset logging onstart set $lock_addr=pthread_mutex_lockset $unlock_addr=pthread_mutex原创 2016-06-30 23:09:35 · 4674 阅读 · 0 评论 -
【跟我一起学gdb】(10)自动化gdb脚本之 list 命令
main.ctom@ubuntu:~/dvp$ cat -n main.c 1 const char* acWordsList[] = {"hello", "world", "good", "BeiJing"}; 2 3 static int s = 0; 4 5 typedef struct 6 { 7 int i...原创 2019-01-26 22:28:51 · 733 阅读 · 0 评论 -
【跟我一起学gdb】(9)自动化gdb脚本之 给指定断点 挂载将每次bt堆栈信息都保存到日志文件的命令
main.ctom@ubuntu:~/dvp$ cat -n main.c 1 typedef struct 2 { 3 int iW; 4 int iH; 5 int iX; 6 int iY; 7 }BOX_ST; 8 9 BOX_ST stBox; 10 static int s...原创 2019-01-26 01:31:50 · 1132 阅读 · 0 评论 -
【跟我一起学gdb】(8)自动化gdb脚本之malloc和free每次调用的堆栈信息写日志
main.ctom@ubuntu:~/dvp$ cat -n ./main.c 1 #include <stdlib.h> 2 #include <stdio.h> 3 4 void MyMalloc(const size_t siz, char** pptr) 5 { 6 *pptr = malloc...原创 2019-01-26 01:18:11 · 1069 阅读 · 0 评论 -
【跟我一起学gdb】(7)自动化gdb脚本 之给断点挂上待触发命令:(break line/func/addr if expression) then commands
main.ctom@ubuntu:~/dvp$ cat main.c -n 1 typedef struct 2 { 3 int iW; 4 int iH; 5 int iX; 6 int iY; 7 }BOX_ST; 8 9 BOX_ST stBox; 10 static int s...原创 2019-01-26 00:19:51 · 1195 阅读 · 0 评论 -
【跟我一起学gdb】(6)自动化gdb脚本 之 watch var if expression
main.ctypedef struct{ int iW; int iH; int iX; int iY;}BOX_ST;int sum(const int a, const int b){ int c = a + b; return c;}BOX_ST stBox;int ...原创 2019-01-25 23:48:36 · 760 阅读 · 0 评论 -
【跟我一起学gdb】(5)自动化gdb脚本 之 break function if expression
main.c#include <stdio.h>typedef struct{ int iW; int iH; int iX; int iY;}BOX_ST;int sum(const int a, const int b){ int c = a + b; return c;}int main(){ BOX_ST stBox; for...原创 2019-01-25 23:24:47 · 693 阅读 · 0 评论 -
【跟我一起学gdb】(4) break-if 以及脚本的第二种使用方法#gdb ./a.out -x gdbcmd.txt
main.c#include <stdio.h>typedef struct{ int iW; int iH; int iX; int iY;}BOX_ST;int main(){ BOX_ST stBox; for (int i = 0; i < 10000; ++i) { stBox.iW = i; stBox.iH = i; ...原创 2019-01-25 22:59:52 · 540 阅读 · 0 评论 -
【跟我一起学gdb】(3)灵活使用arg0,arg1可变入参------打印任意给定的数据结构对象的所有成员变量
mian.ctom@ubuntu:~/dvp$ cat -n main.c 1 #include <stdio.h> 2 3 typedef struct 4 { 5 int iW; 6 int iH; 7 int iX; 8 int iY; 9 }BOX_ST; 10 ...原创 2019-01-25 22:27:11 · 1131 阅读 · 0 评论 -
【跟我一起学gdb】第二个gdb脚本---打印任意给定的数据结构对象的所有成员变量
main.ctom@ubuntu:~/dvp$ cat -n main.c 1 #include <stdio.h> 2 3 typedef struct 4 { 5 int iW; 6 int iH; 7 int iX; 8 int iY; 9 }BOX_ST; 10 ...原创 2019-01-25 22:07:39 · 1967 阅读 · 0 评论 -
【跟我一起学gdb】第一个gdb脚本
main.c#include <stdio.h>typedef struct{ int iW; int iH; int iX; int iY;}BOX_ST;int main(){ BOX_ST stBox; stBox.iW; stBox.iH; stBox.iX; stBox.iY; return 0;}gdb脚本 gdb_...原创 2019-01-25 21:54:38 · 745 阅读 · 0 评论 -
gdb调试时打印寄存器的不同类型值
在对程序gdb调试时,如果需要深入到某个函数的栈帧进行调试时,一般需要显示rbp/ebp、rsp/esp、pc等寄存器的值,或者显示以rsp/esp为参照地址计算出来的其他变量的值。如下所示:(gdb)p *(int*)(&rsp + 0x4)(gdb)p *(long*)(&rsp + 0x4)(gdb)p *(short*)(&rsp + 0x4)(gdb)...原创 2016-07-03 01:22:13 · 6194 阅读 · 0 评论 -
程序的double free测试(使用env MALLOC_CHECK_=1 ./a.out)
1. 下面给出一个写好的会产生double free的程序:如果运行的话会出现Aborted(core dumped)的程序异常退出。和flint、valgrind一样可以在完成功能编码后用flint、valgrind、env命令先对功能代码就行flint测试、valgrind测试、双重释放测试再进行gtest测试、自动化测试会提高测试成功率。env检测功能代码原创 2016-07-03 01:09:19 · 1715 阅读 · 0 评论 -
详细的gdb调试流程
总结下gdb调试流程,当日志用。流程:1)带着调试选项编译(加-g),构建调试对象a.out($g++ -Wall -o2 -g ./a.cpp,如果使用到TSD等还需要加编译选项-lpthread)2.1)启动gdb(开始运行指定程序并调试$gdb ./aout、attach到正在运行的进程并调试$gdb -p `pidof a.out`,gdb -tui分屏显示源代码)2.2)原创 2016-07-02 10:04:57 · 6635 阅读 · 0 评论 -
core的三种生成方法 和 使用core进行gdb调试的方法
core dump:保存问题发生时的状态$ulimit -c$ulimit -c unlimited$file core.*$gdb -c core.7561 ./a.out #core.7561时a.out的core dump,通过gdb -c导入core来调试a.out程序(gdb) list 5 #开始进行gdb调试对a.out注:ulimit是一个和原创 2016-07-02 08:35:28 · 4148 阅读 · 0 评论 -
【跟我一起学gdb】(11)自动化gdb脚本之 file命令 + run命令 + set args命令 + show args命令
mian.ctom@ubuntu:~/dvp$ cat -n mainrun.c 1 #include <stdio.h> 2 3 int sum(const int a, const int b) 4 { 5 int c = a + b; 6 return c; 7 } 8 9 ...原创 2019-01-26 23:10:27 · 2530 阅读 · 1 评论