gdb调试

来源:互联网 发布:九章算法 网盘 编辑:程序博客网 时间:2024/05/10 09:41

原来习惯了在windows上编写程序,使用dev c++或者visual studio 写程序。

现在要转到linux上编写,不是很习惯呢。

调试要用gdb,这个也不习惯。

在linux下用vim写一个程序 test.c

vim text.c

#include<stdio.h>int main(){    int i,result;    for(i=0;i<100;i++)    {        result+=i;    }    printf("%d\n",result);    return 0;}
编译程序,并在编译过程中添加gdb调试信息。

g++ -g -o exe hzq_test.c

这样的编译方式会生成一个调试版程序,程序名为exe的可执行文件。

通过命令:

gdb exe

gdb操作文件exe

(gdb)

如果exe运行需要接受外部参数,给exe设置运行参数:set args 参数1 参数2 。。。

(gdb) set args  ../conf/tts_df18.conf texts/ wav_output/ tesxts/filelist.txt 4

添加断点:命名空间 lbs::common 下 的类TtfModelContextHelper的成员函数build()


(gdb) b main

添加断点:命名空间 lbs::common 下 的类TtfModelContextHelper的成员函数build()

(gdb) lbs::common::TtfModelContextHelper::build

在文件的某一行添加端点:
(gdb) b hzq_chain_prepare.cpp:243
符合某种条件的时候
(gdb)b 243 if outlinks.size() == 2 

查看断点信息

(gdb) info break


删除断点(根据断点号),删除断点好为1的断点

delete 1

运行run命令,程序运行到断点处停止:

(gdb) run

运行程序,运行到main函数第一行停止:

(gdb) start



运行下一步

(gdb) n

继续continue

(gdb) c

退出函数

(gdb) finish

列出代码:

(gdb) l

从第10行列出

(gdb) l 10 

列出main函数

(gdb) l main 

查看变量比如查看变量i

(gdb) p i

查看函数堆栈命令:

(gdb) bt

查看函数堆栈中上一层的调用代码:

(gdb) up

查看函数堆栈中下一层的调用代码:

(gdb) down

查看函数堆栈中第2帧(frame)调用代码:

(gdb) f 2

进入函数s 相当于(stepin):

(gdb) s

退出gdb,在gdb环境下输入命令:

(gdb) quit

任务执行时调用函数:

call param_analyze()

查看数组内容:

p *array_name@len

比如 p *a@10,查看数组a的前10项内容

gdb查看core文件:

gdb exe core.67842

core.67842为core文件,exe为core对应的可执行文件

跟踪调试正在运行的进程 44179为进程号。

gdb exe 44179

或者

gdb attach 44179


其它:

查看数据结构 ptype 结构体名或者对应变量名

info source 查看当前文件信息

return xxx 在当前函数中直接返回xxx

编译时 CFLAGS 或者CXXFLAGS-gdwarf-2和-g3,可以使用macros macro命令

eg:

info macro USING_NNET

macros 

如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮。(off关闭)

set print pretty on

执行到某一行停住:(执行到123行停住)

until 123

参考:

http://blog.csdn.net/horkychen/article/details/7800048

http://www.cnblogs.com/hankers/archive/2012/12/07/2806836.html

(较全面)http://blog.csdn.net/dadalan/article/details/3758025

0 0