gcc,gdb调试

来源:互联网 发布:oracle数据库未打开 编辑:程序博客网 时间:2024/06/06 04:07
有一阵没更新博客了,一方面最近在写关于mfc相关的博客,到更新应该要花上不少时间,另一方面最近也比较忙,事情比较繁琐,其实归根到底还是自己恒心不足,在此检讨,在清明节这段时间尽量补上
这篇博客质量不高,主要是记下liunx下gdb调试方法指令,方便忘了能迅速查找
gdb 调试

(01) 首先,输入gdb test
(02) 进入到gdb的调试界面之后,输入list,即可看到test.c源文件
(03) 设置断点,输入 b main 
(04) 启动test程序,输入run 
(05) 程序在main开始的地方设置了断点,所以程序在printf处断住
(06) 这时候,可以单步跟踪。s单步可以进入到函数,而n单步则越过函数
(07) 如果希望从断点处继续运行程序,输入c
(08) 希望程序运行到函数结束,输入finish
(09) 查看断点信息,输入 info break
(10) 如果希望查看堆栈信息,输入bt
(11) 希望查看内存,输入 x/64xh + 内存地址
(12) 删除断点,则输入delete break + 断点序号
(13) 希望查看函数局部变量的数值,可以输入print + 变量名

(14)希望修改内存值,直接输入 print  + *地址 = 数值
(15) 希望实时打印变量的数值,可以输入display + 变量名
(16) 查看函数的汇编代码,输入 disassemble + 函数名
(17) 退出调试输入quit即可

gdb基本命令1

命令 描述

backtrace(或bt) 查看各级函数调用及参数

finish 连续运行到当前函数返回为止,然后停下来等待命令

frame(或f) 帧编号选择栈帧

info(或i)locals 查看当前栈帧局部变量的值

list(或l) 列出源代码,接着上次的位置往下列,每次列10行

list 行号 列出从第几行开始的源代码

list 函数名 列出某个函数的源代码

next(或n) 执行下一行语句

print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数

quit(或q) 退出gdb调试环境

set var 修改变量的值

start 开始执行程序,停在main函数第一行语句前面等待命令

step(或s) 执行下一行语句,如果有函数调用则进入到


break(或b) 行号 在某一行设置断点

break 函数名 在某个函数开头设置断点

break ... if ... 设置条件断点

continue(或c) 从当前位置开始连续运行程序

delete breakpoints 断点号删除断点

display 变量名 跟踪查看某个变量,每次停下来都显示它的值

disable breakpoints 断点号禁用断点

enable 断点号 启用断点

info(或i)breakpoints 查看当前设置了哪些断点

run(或r) 从头开始连续运行程序

undisplay 跟踪显示号 取消跟踪显示


有一些朋友对程序的反汇编感兴趣,那么他需要两个步骤:1、gcc hello.c -g -o hello;2、objdump -S -d ./hello。
之所以在gcc编译的时候加上-g是为了添加调试信息,objdump中的-S选项是为了在显示汇编代码的时候同时显示原来的C语言源代 码。



静态库
    那么,在linux下面应该怎么运行呢?其实很简单,两条命令解决,
(1)首先生成*.o文件,输入gcc -c test.c -o test.o
(2)利用ar命令生成静态库,输入ar rc libtest.a test.o

 此时如果还有一个hello.c文件使用到了这个静态库
其实也很简单,输入一个简单的命令就可以生成执行文件了,
(1)首先输入gcc hello.c -o hello ./libtest.a

动态库:
 此时如果我们想要生成动态库,要做的工作其实非常简单,输入gcc -shared -fPIC -o libtest.so test.c即可
发现使用到了动态库add函数,那么此时如何才能生成一个执行文件呢?也很简单,输入gcc hello.c -o  hello ./libtest.so。
0 0
原创粉丝点击