Linux程序设计:调试

来源:互联网 发布:防伪底纹软件 编辑:程序博客网 时间:2024/06/06 16:51

本文主要介绍了几个比较有用的调试工具或工具

1 取样法

用C语言的预编译器有选择的加上取样代码


而后我们只需要编译时加上-DDEBUG这个选项就能启动这些内容



上面这种情况为我们提供了更加复杂的格式,在这种情况下我们必须总是定义DEBUG的值如 :-DDEBUG=1我们就启动了BASIC——DEBUG的内容

下面是我们在可以在这些预编译器可以使用的一些变量





然后是gdb的使用,gdb是个很强大的工具


你可以通过 gdb   test(待调试的程序名)


通过输入help能查看gdb的使用


gdb运行程序时会在发生错误的地方停下来


我们可以通过命令backtrace来查看我们是如何到达这个地方的(栈追踪)


print用来查询变量,结果会保持在$!,$2......这些临时变量中,其中最后一个变量一般为$,倒数第二个为$$

list用来列出一个行号附近的所有代码

break 用来设置断点



cont用于继续执行


display使得到达断点时不会停止而只是输出内容但是不会停止

 

commands由用于指定到达断点时要执行的命令

i

disable用来禁用断点和display命令

如: dilsable  break 1


command 可以用来打补丁 ,也就是用来执行某些代码 使得错误被改正


ctags 用来输出每个函数的信息,包括:函数名,位于哪个文件,可以在这个文件找到他的正则表达式


cflows输出一个函数调用树(加-i反向输出)

在调试时加上-p或者-pg能产生执行存档



断言asser这个好像就是对表达式进行求值,如果为非零就会在标准错误里写入一些错误信息,要注意的是如果已经定义了NDEBUG宏就不要再定义assert了


ElectricFence和valgrindf两个都是用来调试内存的


ElectricFence是对函数库libefence.a的连接,会将所有malloc和与之相关的函数全部变为虚拟内存机制的版本


而如果要检查内存泄露一定要用的是valgrind


用法例子

valgrind  --leak-check=yes -v ../check



0 0
原创粉丝点击