![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译
steven_yzx
天行健,君子以自强不息!地势坤,君子以厚德载物!
展开
-
gdb 断点(三)catch
在调试的时候通常用catchpoints来捕获事件,如c++的异常等。捕获点的设置通过catch与tcatch两个命令。 tcatch所设置的断点停止一次后自动删除,设置断点的方法与catch相同。 用法:catch event 这些event事件如下: throw The throwing of a C++ exception.翻译 2011-10-24 18:13:34 · 11105 阅读 · 0 评论 -
gcc 链接库的顺序问题
今天在编译的时候遇到一个gcc编译链接库顺序的问题,描述如下:$ gcc elements.c -o par -L/usr/lib -lparsifal编译通过,但是如下编译时出错$ gcc -L/usr/lib -lparsifal elements.c -o par/tmp/ccO82iYg.o: In function `main':elements.c:(.te原创 2012-09-19 12:48:51 · 7382 阅读 · 2 评论 -
ubuntu 编译 找不到 -ly
首先搜索本地,确定你/lib中没有需要的库可按照一下步骤操作:1.方法一cannot find -lysudo apt-get install flex bison简要描述 bison 根据一系列规则来生成一个可以分析文本文件的结构的程序,Bison 是一个 替代 Yacc (Yet Another Compiler Compiler) 的语法分析程序生成器。原创 2012-08-28 17:40:47 · 4555 阅读 · 1 评论 -
gcc 编译选项笔记
gcc 参考文档http://www.9linux.com/gcc.html最近在定位bug的时候看牛人用gcc的选项调试,很有用所以计下来,共享一下。1、记录gcc 的编译时的中间文件 .i .sgcc 加上选项 -save-temps 可以记录编译时候生成的 预编译文件 .i 和汇编文件 .s。这些中间文件在查找头文件是否包含,或包含的路径是否正确、变量的声明、原创 2011-12-02 18:42:37 · 1113 阅读 · 0 评论 -
nm
对于每一个符号,nm列出其值(the symbol value),类型(the symbol type)和其名字(the symbol name)。这对于检查库中是否包含自己要用的库很方便。如nm syslib.a | grep test_funnm [‘-a’|‘--debug-syms’] [‘-g’|‘--extern-only’] [‘-B’] [‘原创 2011-12-02 18:59:31 · 901 阅读 · 0 评论 -
gdb 调试(五)检查文件之list
gdb根据记录的调试信息知道我们要调试的文件信息。所以通过gdb我们能查看源码。 同时gdb也提供修改源码文件的指令。 1、 查看源码gdb中通过list命令查看源码。list每次显示的函数可以指定,下文中假定指定显示的行数为10行。 list linenum 以linenum指定的行号为中心,显示10行 list function 以指定的函翻译 2011-10-27 22:08:36 · 10360 阅读 · 2 评论 -
gdb 调试(五)检查文件之搜索和查看汇编指令
1、 源码文件查找gdb调试可以通过以下三个命令查找源文件。 forward-search regexp 从源文件首行还是搜索 关键字regexp,并将搜索到的行号记录。这个记录可以被下一个gdb命令引用。 例:for void搜索结果:38 void接下来运行命令:list 则显示以38行为中心的10行内容。(要显示的行数可以指定) search reg翻译 2011-10-27 22:40:44 · 4571 阅读 · 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 · 1917 阅读 · 0 评论 -
gdb调试(四)函数调用栈之Backtraces
通过产看栈信息,我们可以了解栈内帧的编号或地址,通过选择帧我们可以移动到指定的帧内去产看信息。1、查看栈信息产看函数调用栈的几个函数bt 显示所有的函数调用栈帧的信息,每个帧一行。bt n 显示栈定的n个帧信息。bt -n 显示栈底的n个帧信息。bt full 显示栈中所有帧的完全信息如:函数参数,本地变量翻译 2011-10-27 18:38:00 · 25728 阅读 · 0 评论 -
gdb调试(四)函数调用栈—stack
什么是函数调用栈 程序每调用一次函数,关于这个函数的信息就会产生。这些信息包括,调用函数的地方、函数的参数、被调用函数变量等。这些信息存储在一个叫做函数调用信息帧的内存中,这些函数信息帧就组成了函数调用栈。 gdb提供了一些指令可以查看这些帧中的信息。当查询函数变量的信息时,gdb就是从这个被选中的帧内获取信息,但是查看被选中帧外的变量信息是非法的。当程序运行翻译 2011-10-26 23:27:38 · 3998 阅读 · 0 评论 -
gdb调试(四)函数调用栈之--frame
函数调用栈由连续的栈帧组成。每个栈帧记录一个函数调用的信息,这些信息包括函数参数,函数变量,函数运行地址。 当程序启动后,栈中只有一个帧,这个帧就是main函数的帧。我们把这个帧叫做初始化帧或者叫做最外层帧。每当一个函数被调用,一个新帧将被建立,每当一个函数返回时,函数帧将被剔除。如果函数是个递归函数,栈中将有很多帧是记录同一个函数的。但前执行的函数的帧被称作最深帧,这个帧是翻译 2011-10-27 13:54:52 · 17041 阅读 · 0 评论 -
gdb调试(三)运行调试程序
三、gdb运行指令 continue [ignore-count] 继续运行程序,直到结束或者触发下个断点。step 单步执行,可进入函数内部。step count next [count] 以文件行为参考,运行下一行指令。遇到函数调用,跳过函数内部。 finish 运行至函数返回。 until翻译 2011-10-26 22:39:22 · 1540 阅读 · 0 评论 -
gdb断点(七)为断点设定指令集Breakpoint Command Lists
如果想在程序停止在断点的时候,打印信息,或给一些有价值的变量赋值以便定位bug,或者是激活其他断点,可以为这个断点设置一些指令集,完成这些操作。gdb的commands指令帮你实现这个功能能。用法:commands [range...] ... command-list ... end 例1:在设置断点的时候设定命令集每个指令以行的形式设置,每行输入一个gdb指令,结束翻译 2011-10-26 21:50:55 · 5642 阅读 · 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 · 34358 阅读 · 1 评论 -
gdb break 断点设置(一)
http://sourceware.org/gdb/current/onlinedocs/gdb二、断点设置gdb断点分类:以设置断点的命令分类:breakpoint可以根据行号、函数、条件生成断点。watchpoint监测变量或者表达式的值发生变化时产生断点。catchpoint监测信号的产生。例如c++的throw,或者加载库的时候。gdb中的变量从1开翻译 2011-10-23 13:03:09 · 147597 阅读 · 2 评论 -
gdb断点(五)激活与禁止
对断点的控制除了建立和删除外,还可以通过使能和禁止来控制,后一种方法更灵活。断点的四种使能操作:enable [breakpoints] [range...] 完全使能enable //激活所有断点enable 4 //激活4断点enable 5-6 //激活5~6断点disable [bre翻译 2011-10-24 19:18:53 · 7904 阅读 · 0 评论 -
gdb断点(四)删除
断点的删除与断点的设置同样的重要。删除断点的命令有两个:delete用法:delete [breakpoints num] [range...]delete可删除单个断点,也可删除一个断点的集合,这个集合用连续的断点号来描述。例如:delete 5delete 1-10clear用法:clear 删除所在行的多有断点。 clear loca翻译 2011-10-24 18:36:41 · 128354 阅读 · 0 评论 -
gdb断点(六)condition 与ignore
如果为一个断点设置一个条件,每当程序到达这个断点的时候都会去判断是否为TRUE,只有条件为TRUE时才会在断点出停下。断点条件的调试方式与断点断言的调试方式逻辑是想反的,assert是当条件为FALSE时停止,所一如果在条件调中用断言的话应该是:condition !assert(exp)。断点的条件调试优越性在同个地方设置多个断点的时候体现的更完美。这样我们就可以控制在同一个断点翻译 2011-10-24 23:24:09 · 14720 阅读 · 1 评论 -
GCC 警告提示
GCC 警告提示本节主要讲解GCC的警告提示功能。GCC包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员写出更加专业和优美的代码。我们千万不能小瞧这些警告信息,在很多情况下,含有警告信息的代码往往会有意想不到的运行结果。首先可以先看一下以下这段代码:#includevoid main(void){long long tmp = 1;转载 2012-12-27 14:03:43 · 9418 阅读 · 1 评论