
调试方法
文章平均质量分 53
偏test
这个作者很懒,什么都没留下…
展开
-
gdb源码中的print命令实现
源码的搭建环境可以参考下面这篇文章windows下编译gdb源码首先随便写了个测试程序 int c = 51115; int b[10] = {0}; int *p = malloc(40); sprintf(b,"%p",p); c +=b[0]&0xff; //随便赋一个非常量值,如果是常量的话编译时就直接算好写到PE文件里了 printf("%d\n",c); //这里是86行,打印出来是51163gdb脚本如下,文件名是sdx.txt,执行时加上-comman原创 2021-02-16 21:51:12 · 630 阅读 · 0 评论 -
uftrace关键代码记录
uftrace是一个跟踪程序的函数调用记录的一个工具,代码见https://github.com/namhyung/uftrace参数解析使用的argp,我把glibc里的argp模块单独提取出来了,见argp模块参数解析完会执行各种命令 switch (opts.mode) { case UFTRACE_MODE_RECORD: ret = command_record(argc, argv, &opts); break; case UFTRACE_MODE_REPLAY:原创 2020-10-20 21:57:56 · 488 阅读 · 0 评论 -
eclispe设置断点无效(No source file named)
最近不知道做了什么操作导致eclipse的断点无效,表现为gdb只认相对路径的断点,不认绝对路径,而eclipse打断点使用的是绝对路径,导致无效,输出信息是:No source file named默认情况下是不存在这个问题的,不知道怎么恢复成默认,但有一种有效的解决方法:Debug->Debug Configuration->Source->Add->Path-&...原创 2020-04-11 08:31:10 · 1133 阅读 · 1 评论 -
GDB的初步使用学习
对于一般的设断点、单步运行、查看变量的值和函数调用堆栈等调试使用eclipse就够了。但是有时候想输出大量的调试信息,并对程序做很多跟踪控制,这时候用命令行可能会比IDE更方便一点。而且eclipse是基于GDB的,所以熟悉GDB的使用对eclipse里调试环境的配置也会有一定帮助。 一、 基本命令 这里不打算介绍很多命令,只是介绍一些基本的命令来对GDB有一个基本的认识。 对于原创 2018-02-19 15:13:19 · 393 阅读 · 0 评论 -
函数调用堆栈追踪(1)
对于一个比较大的工程,函数的调用关系错综复杂,这时候仅仅靠IDE静态查看函数的调用关系已经远远不够,所以为了更好地理解代码,还是有必要去掌握一些方法和工具来跟踪函数的调用堆栈。 一、 设断点 在eclipse里可以设置断点查看函数的堆栈调用情况,这里比较方便的是可以直接定位到上级函数查看变量的值。 二、 使用backtrace backtrace功能可以跟踪函数的原创 2018-02-21 19:39:38 · 2546 阅读 · 0 评论 -
函数调用堆栈追踪(2)
在上一篇中介绍的2种方法都是在代码的某个特定的地方查看函数的调用关系,接下来介绍的2个工具可以追踪程序从main函数开始全部执行过的函数。 1.uftrace 1.1安装 工具在github上下载,地址如下: https://github.com/namhyung/uftrace readme里提供了一些简单的示例来说明uftrace的使用,这里主要针对稍复杂点的工程,演示程原创 2018-02-22 19:28:13 · 1240 阅读 · 0 评论 -
动态库调试
在一个大型工程里,往往需要依赖很多动态库(linux下是.so文件),我们只能调用动态库里的函数,却不能跟踪动态库中函数的具体实现流程和变量的值,要理解函数的功能一般都是看文档说明,有时候文档又说的不清楚,这个时候只能结合源码做一些猜测,但是源代码又错综复杂,在短时间内很难理解,所以要是能够单步调试源码并结合打印信息效果会好很多。 这篇文章就结合实例讲解在linux环境下怎么调试动态库,以sql原创 2018-03-06 11:47:14 · 1165 阅读 · 0 评论 -
C语言调试内存访问出错而引起的程序崩溃问题
在写代码的时候,经常碰到由于内存访问出错而导致程序崩溃。当代码量比较多的时候,根本不知道程序错在哪里,只能不断猜测代码出错的地方,将其注释掉还会不会出现程序崩溃,这种方法虽然最后也能找到问题所在,但是会耗费大量时间。linux下调试通常会生成core dump文件,再结合gdb调试来定位问题,这种方法我没有研究过,我一般在win下的msys2环境下开发,无意中发现了一种非常有效的调试方法,我觉得...原创 2018-10-06 10:26:19 · 2188 阅读 · 0 评论