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