![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
调试积累
steven_yzx
天行健,君子以自强不息!地势坤,君子以厚德载物!
展开
-
cppcheck 代码静态扫描
静态扫描代码合法性原创 2022-06-25 09:58:52 · 589 阅读 · 0 评论 -
gdb调试(四)函数调用栈—stack
什么是函数调用栈 程序每调用一次函数,关于这个函数的信息就会产生。这些信息包括,调用函数的地方、函数的参数、被调用函数变量等。这些信息存储在一个叫做函数调用信息帧的内存中,这些函数信息帧就组成了函数调用栈。 gdb提供了一些指令可以查看这些帧中的信息。当查询函数变量的信息时,gdb就是从这个被选中的帧内获取信息,但是查看被选中帧外的变量信息是非法的。当程序运行翻译 2011-10-26 23:27:38 · 4022 阅读 · 0 评论 -
gdb 调试(五)检查文件之编辑源文件。
gdb 调试的时候可以编辑源文件。edit locationlocation可以使行号,函数名,文件中指定的位置。例:edit 32 编辑当前文件的32行edit main 编辑当前文件的main函数edit main.c:init .编辑main.c中的init函数edit mian.c:32 编辑main.c中的32行 指定翻译 2011-10-27 22:07:27 · 1921 阅读 · 0 评论 -
gdb 调试(五)检查文件之list
gdb根据记录的调试信息知道我们要调试的文件信息。所以通过gdb我们能查看源码。 同时gdb也提供修改源码文件的指令。 1、 查看源码gdb中通过list命令查看源码。list每次显示的函数可以指定,下文中假定指定显示的行数为10行。 list linenum 以linenum指定的行号为中心,显示10行 list function 以指定的函翻译 2011-10-27 22:08:36 · 10404 阅读 · 2 评论 -
gdb 调试(五)检查文件之搜索和查看汇编指令
1、 源码文件查找gdb调试可以通过以下三个命令查找源文件。 forward-search regexp 从源文件首行还是搜索 关键字regexp,并将搜索到的行号记录。这个记录可以被下一个gdb命令引用。 例:for void搜索结果:38 void接下来运行命令:list 则显示以38行为中心的10行内容。(要显示的行数可以指定) search reg翻译 2011-10-27 22:40:44 · 4578 阅读 · 0 评论 -
gdb调试(四)函数调用栈之Backtraces
通过产看栈信息,我们可以了解栈内帧的编号或地址,通过选择帧我们可以移动到指定的帧内去产看信息。1、查看栈信息产看函数调用栈的几个函数bt 显示所有的函数调用栈帧的信息,每个帧一行。bt n 显示栈定的n个帧信息。bt -n 显示栈底的n个帧信息。bt full 显示栈中所有帧的完全信息如:函数参数,本地变量翻译 2011-10-27 18:38:00 · 25833 阅读 · 0 评论 -
调试时用到得宏
这是我在linux zc0301摄像头源码中摘抄的调试宏函数,可以借鉴。 #define DBG(format, arg...) do { /printk(KERN_DEBUG "%s: " format "/n" , __func__ , ## arg); /} while (0) 借鉴后自己整理的宏调试函数:打印出调试信息及所在的文件、在文件中的行号、所在的函数。原创 2010-01-20 17:27:00 · 1521 阅读 · 0 评论 -
gdbserver 调试时gdb运行c时崩溃不能正常调试
如果gdb调试时经常崩溃不能运行gdb指令,且gdb加载调试程序时出现如下警告: "warning: Can not parse XML target description; XML support was disabled at compile time" 原因:gdb编译时缺少XML的解析库expat, 这个库对gdb是可选项,但是我编译gdb7.6的时候如果没有这个原创 2013-10-24 17:59:13 · 11165 阅读 · 2 评论 -
gdbserver 移植
1、http://ftp.gnu.org/gnu/gdb/ 下载gdb。gdb-7.6.2.tar.gz2、编译gdb $ tar xzvf gdb-7.6.2.tar.gz $ cd gdb-7.4.1 $ ./configure --target=arm-linux --prefix=$PWD/bin $ mkdir bin原创 2013-07-24 12:20:30 · 3486 阅读 · 1 评论 -
gdb调试(四)函数调用栈之--frame
函数调用栈由连续的栈帧组成。每个栈帧记录一个函数调用的信息,这些信息包括函数参数,函数变量,函数运行地址。 当程序启动后,栈中只有一个帧,这个帧就是main函数的帧。我们把这个帧叫做初始化帧或者叫做最外层帧。每当一个函数被调用,一个新帧将被建立,每当一个函数返回时,函数帧将被剔除。如果函数是个递归函数,栈中将有很多帧是记录同一个函数的。但前执行的函数的帧被称作最深帧,这个帧是翻译 2011-10-27 13:54:52 · 17059 阅读 · 0 评论 -
gdb调试(三)运行调试程序
三、gdb运行指令 continue [ignore-count] 继续运行程序,直到结束或者触发下个断点。step 单步执行,可进入函数内部。step count next [count] 以文件行为参考,运行下一行指令。遇到函数调用,跳过函数内部。 finish 运行至函数返回。 until翻译 2011-10-26 22:39:22 · 1548 阅读 · 0 评论 -
gdb调试(二)断点设置(英文板)
Breakpoints are set with the break command (abbreviatedb). The debugger convenience variable `$bpnum' records thenumber of the breakpoint you've set most recently; seeConvenience Variables, for a翻译 2011-10-21 14:47:35 · 5131 阅读 · 0 评论 -
gdb断点(四)删除
断点的删除与断点的设置同样的重要。删除断点的命令有两个:delete用法:delete [breakpoints num] [range...]delete可删除单个断点,也可删除一个断点的集合,这个集合用连续的断点号来描述。例如:delete 5delete 1-10clear用法:clear 删除所在行的多有断点。 clear loca翻译 2011-10-24 18:36:41 · 128653 阅读 · 0 评论 -
gdb 断点设置(二)watch
2、watch watch [-l|-location] expr [thread threadnum] [mask maskvalue] -l 与 mask没有仔细研究,thread threadnum 是在多线程的程序中限定只有被线程号是threadnum的线程修改值后进入断点。 经常用到的如下命令: watch 为表达式(变量)e翻译 2011-10-23 23:04:55 · 34393 阅读 · 1 评论 -
gdb断点(六)condition 与ignore
如果为一个断点设置一个条件,每当程序到达这个断点的时候都会去判断是否为TRUE,只有条件为TRUE时才会在断点出停下。断点条件的调试方式与断点断言的调试方式逻辑是想反的,assert是当条件为FALSE时停止,所一如果在条件调中用断言的话应该是:condition !assert(exp)。断点的条件调试优越性在同个地方设置多个断点的时候体现的更完美。这样我们就可以控制在同一个断点翻译 2011-10-24 23:24:09 · 14752 阅读 · 1 评论 -
gdb break 断点设置(一)
http://sourceware.org/gdb/current/onlinedocs/gdb二、断点设置gdb断点分类:以设置断点的命令分类:breakpoint可以根据行号、函数、条件生成断点。watchpoint监测变量或者表达式的值发生变化时产生断点。catchpoint监测信号的产生。例如c++的throw,或者加载库的时候。gdb中的变量从1开翻译 2011-10-23 13:03:09 · 147689 阅读 · 2 评论 -
gdb 断点(三)catch
在调试的时候通常用catchpoints来捕获事件,如c++的异常等。捕获点的设置通过catch与tcatch两个命令。 tcatch所设置的断点停止一次后自动删除,设置断点的方法与catch相同。 用法:catch event 这些event事件如下: throw The throwing of a C++ exception.翻译 2011-10-24 18:13:34 · 11154 阅读 · 0 评论 -
gdb断点(七)为断点设定指令集Breakpoint Command Lists
如果想在程序停止在断点的时候,打印信息,或给一些有价值的变量赋值以便定位bug,或者是激活其他断点,可以为这个断点设置一些指令集,完成这些操作。gdb的commands指令帮你实现这个功能能。用法:commands [range...] ... command-list ... end 例1:在设置断点的时候设定命令集每个指令以行的形式设置,每行输入一个gdb指令,结束翻译 2011-10-26 21:50:55 · 5649 阅读 · 0 评论 -
gdb调试(一)启动调试程序
一、启动>>gdb启动 gdb 调试之前加载调试符号,即编译时候加 –g选项,如 gcc file.c –g –o target 启用gdb的方法种有3种,一种是启动core,还有是attach一个已经运行的进程。 1. gdb 2. gdb core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core d原创 2011-10-20 21:53:28 · 17255 阅读 · 1 评论