最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。
创新互联于2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元大渡口做网站,已为上家服务,为大渡口各地企业和个人服务,联系电话:13518219792
shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:
sh -x strangescript
这将执行该脚本并显示所有变量的值。
shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n your_script
这将返回所有语法错误。
linux/unix shell l脚本调试方法
Shell提供了一些用于调试脚本的选项,如下所示:
-n
读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
-v
一边执行脚本,一边将执行过的脚本命令打印到标准错误输出
-x
提供跟踪执行信息,将执行的每一条命令和结果依次打印出来
使用这些选项有三种方法,一是在命令行提供参数
$ sh -x ./script.sh二是在脚本开头提供参数
#! /bin/sh -x第三种方法是在脚本中用set命令启用或禁用参数
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fiset -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。
Gdb调试
注意:在Gcc编译选项中一定要加入
–g
退出GDB:quit
或
Ctrl+d
调试过程:
1.
查看文件
命令:
(gdb)
l
命令:(gdb)
b
行号
注:到第17行停止,并没有执行17行
3.
查看断点情况
info
b
4.
运行代码
r
命令:
(gdb)
r
(也可以指定行开始运行,在r后面加上行号)
5.
查看变量值
p
命令:(gdb)
p
变量名
6.
设置监视点:
watch
z
(变量名)
也可以是复杂的表达式
7.
单步运行
命令:(gdb)
n
(逐过程)
8.逐步,会进入函数
命令:(gdb)
s
9.条件断点
将正常断点转变为条件断点:condition
如:condition
1
i
==
10
只有当满足条件i
==
1时,才会在断点1处暂停
10.
恢复程序运行
c
命令:
(gdb)
c
(程序就会运行,如果没有断点,就运行剩下部分,如果有断点,就会运行到下一个断点)
11.
去除断点
clear
line_number
clear
filename:line_number
12.
help
12.1
help找出类别
12.2help从列表中
根据这些可以查看系统调用的完整性,比如说服务器连接数一直涨,说明fd没有close,close调用在上边有缺失
strace -t -T -v -f -p 16705 -Te write 只看write系统调用
sudo gcore xxpid 生成dump文件
sudo dlv core binfile core.xxxx 调试coredump文件,查看调用栈、goroutines
查看系统级别日志 /var/log/messages
messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。
tcpdump -i lo -nnA 'port 7076' and 'tcp[13] 4 != 0 ' 抓rst包,发送给7076端口或者是7076端口发出去的
mac osx系统:sudo tcpdump -i lo0 -nnA 'port 3000'
只需要在linux的命令行下执行: matlab -nodesktop -nosplash -r “你的程序的名字” (前提是matlab所在的目录在你的PATH变量包含的目录中)