专题 20 常用调试技术

1.gdb调试


进入:
gdb
退出:
quit or q

gdb ./binary

设置断点
break main 
break factorial.c:23
禁用所有断点:
disable
执行下一条命令:
next

查看代码:
list
返回当前代码行
l  23(lineno)

打印变量名
print varname


打印局部变量
info locals


重新执行程序
r

设置一个变量的值
p factorial=1


不用退出GDB,直接编译程序
make factorial.c


2.strace命令

使用很多系统调用的程序常常难以查找错误,因为控制权被传递给内核以便处理系统调用。可以使用strace程序,它是跟踪使用了什么系统调用以及系统调用的结果的一种方法。

strace程序截取程序发出的系统调用并且显示它们以供查看。被跟踪的程序可以是从strace命令运行的,也可以是系统上已经运行的进程。通常只需使用strace程序默认选项生成关于程序的必要信息即可:

[fuyajun@localhostwork]$strace./hello

execve("./hello",["./hello"],[/*36vars*/])=0

write(1,"Hello,world!\n",14Hello,world!

)=14

_exit(0)命令行参数-c在程序执行之后创建一个报告,概述发出的所有系统调用,以及每个系统调用花费了多长时间。

[fuyajun@localhostwork]$strace-c./hello

Hello,world!

%timesecondsusecs/callcallserrorssyscall

--------------------------------------------------------------

100.000.0006426421execve

0.000.00000001write

--------------------------------------------------------------

100.000.0006422total


高级strace参数:

-e参数可以用于只显示系统调用的子集,而不是查看全部。

strace–e trace=call_list,其中,call_list是以逗号分隔的希望跟踪的系统调用的清单。


附加到正在运行的程序:

strace–p 3456



你可能感兴趣的:(专题 20 常用调试技术)