linux调试命令 linux如何调试( 二 )


常见的环境变量
对于 PATH和HOME等环境变量大家都不陌生 。
PATH能够指定命令的搜索路径 , 那么动态链接库的路径用什么变量指定呢?或者就是在 PATH里面?
比如有一个程序需要/usr/local/lib下面的一个库文件,应该怎么指定其路径呢?
经常看到有些变量如 LD_LIBRARY_PATH,LIBPATH,CLASSPATH等,他们之间有什么不同和关系?
除此之外,还有下面一些常见环境变 量 。
◆ HISTSIZE是指保存历史命令记录的条数 。
◆ LOGNAME是指当前用户的登录名 。
◆ HOSTNAME是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的 。
◆ SHELL是指当前用户用的是哪种Shell 。
◆ LANG/LANGUGE是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量 。
◆ MAIL是指当前用户的邮件存放目录 。
◆ PS1是基本提示符,对于root用户是# , 对于普通用户是$ 。PS2是附属提示符 , 默认是“” 。可以通过修改此环境变量来修改当前的命令符,比 如下列命令会将提示符修改成字符串“Hello,My NewPrompt ” 。
linux线上程序问题调试命令根据这些可以查看系统调用的完整性 , 比如说服务器连接数一直涨 , 说明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-hexdump命令调试event驱动hexdump: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用
描述
我们以event1为例,当我们insmod挂载了键盘驱动后,出现一个event1设备,
此时没有按键按下,所以event1里面的数据是没有的,那么数据又是从来哪里来?
通过键盘驱动的read函数,若有按键按下,就会上传按键数据给用户层hexdump
因为键盘驱动的input_handler 是:evdev_handler
所以键盘驱动的read函数是: evdev_handler-evdev_fops-evdev_read
进入evdev_read()函数,如下图所示:
evdev_event_to_user()这个函数从字面上来看,显然就是用来上传给用户层的函数,其中buffer是函数参数,指向用户层,所以数据就是event.
我们来看看event的结构体:input_event
把 time里的成员展开如下:
所以我们hexdump调试任何输入子系统event XX驱动时,有信息就会打印上面数据
1.调试键盘驱动
以按开发板的按键 KEY_L,为例(因为数据是从低到高打印的,所以数据是反的):
FFmpeg之Linux下编译与调试下面的一切都是在 root 模式下进行的linux调试命令,可以不再 root 模式下进行
基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定 , 这里列出语句如下linux调试命令:
依赖库分两方面,参考以下网站列出的依赖库信息,本文选择的版本均参考于此网页: FFmpeg依赖库信息
首先创建 FFmpeg 代码目录,所有的源代码放在这个目录下

推荐阅读