linux的调试命令 linux调试程序的命令是什么

如何进行Linux下多线程的调试方法一:PS
在ps命令中,“-T”选项可以开启线程查看 。下面的命令列出了由进程号为pid的进程创建的所有线程 。
1.$ ps -T -p pid
“SID”栏表示线程ID,而“CMD”栏则显示了线程名称 。
方法二: Top
top命令可以实时显示各个线程情况 。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程 。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关 。
【linux的调试命令 linux调试程序的命令是什么】1.$ top -H
要让top输出某个特定进程pid并检查该进程内运行的线程状况:
$ top -H -p pid
怎么在linux系统下调试程序(1)假设要debug的进程号为1000,运行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到进程 。
(2)载入libpython脚本
如果你的gdb是redhat或fedora等厂商修改过的,会有--python选项,使用此选项即可指定gdb启动时载入的Python扩展脚本(此脚本是扩展gdb的,不是我们需要debug的脚本) 。
$ gdb --python /path/to/libpython .py -p 1000
如果安装的是GNU的gdb , 就需要打开gdb后手动载入libpython.py脚本
(gdb) python
import sys
sys.path.insert(0, '/path/to/libpython.py' )
import libpython
end
(gdb)
这时就可以使用py-bt命令打印当前线程的Python traceback了 。libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看 。
Linux lsof命令详解lsof全名list opened files,也就是列举系统中已经被打开的文件 。我们都知道,linux环境中,任何事物都是文件 ,
设备是文件 , 目录是文件,甚至sockets也是文件 。所以,用好lsof命令,对日常的linux管理非常有帮助 。
lsof是linux最常用的命令之一,通常的输出格式为:
引用
常见包括如下几个字段:更多的可见manual 。
1、COMMAND
默认以9个字符长度显示的命令名称 。可使用 c参数指定显示的宽度,若 c后跟的参数为零,则显示命令的全名
2、PID:进程的ID号
3、PPID
父进程的IP号,默认不显示,当使用-R参数可打开 。
4、PGID
进程组的ID编号,默认也不会显示,当使用-g参数时可打开 。
5、USER
命令的执行UID或系统中登陆的用户名称 。默认显示为用户名,当使用-l参数时,可显示UID 。
6、FD
是文件的File Descriptor number,或者如下的内容:
(这里很难翻译对应的意思,保留英文)
引用
文件的File Descriptor number显示模式有:
引用
7、TYPE
引用
IPv4 IPv4的包;
IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;
DIR 目录
LINK 链接文件
详情请看manual中更多的注释 。
8、DEVICE
使用character special、block special表示的设备号
9、SIZE
文件的大?。?如果不能用大小表示的,会留空 。使用-s参数控制 。
10、NODE
本地文件的node码,或者协议 , 如TCP等
11、NAME
挂载点和文件的全路径(链接会被解析为实际路径) , 或者连接双方的地址和端口、状态等
常用示例:
1.显示开启文件/home/oracle/10.2.0/db_1/bin/tnslsnr的进程
2.知道22端口现在运行什么程序
3.显示init进程现在打开的文件
6.依照文件夹/home/oracle来搜寻,但不会打开子目录,用来显示目录下被进程开启的文件
显示内容太多了,不显示了
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
关注:
进程调试命令:truss、strace和ltrace
进程无法启动,软件运行速度突然变慢,程序的"SegmentFault"等等都是让每个Unix系统用户头痛的问题,而这些问题都可以通过使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症" 。
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: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用
描述
linux的调试命令我们以event1为例,当我们insmod挂载linux的调试命令了键盘驱动后,出现一个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,为例(因为数据是从低到高打印的,所以数据是反的):
Linuxquid安装调试中几个常用命令介绍1、初始化你在 squid.conf 里配置的 cache 目录
#squid/sbin/squid -z //第一次启动squid服务时必须输入此命令
如果有错误提示,请检查你的 cache目录的权限 。
2、对你的squid.conf 排错,即验证 squid.conf 的 语法和配置 。
#squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid 。
3、在前台启动squid,并输出启动过程 。
#squid/sbin/squid -N -d1
如果有到 ready to server reques,恭喜 , 启动成功 。
然后 ctrlc , 停止squid , 并以后台运行的方式启动它 。
4、启动squid在后台运行 。
#squid/sbin/squid -s
这时候可以 ps -A 来查看系统进程 , 可以看到俩个 squid 进程 。
5、停止 squid
#squid/sbin/squid -k shutdown
这个不用解释吧 。
6、重引导修改过的 squid.conf
#squid/sbin/squid -k reconfigure
这个估计用的时候比较多,当你发现你的配置有不尽你意的时候 , 可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让运行中squid重新按照你的squid.conf 来运行 。
7、把squid添加到系统启动项
编辑 /etc/rc.d/rc.local
添加如下行: /usr/local/squid/sbin/squid -s
当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务 。
再来点其他的 。
1、修改cache 缓存目录的权限 。
#chown -R squid:squid /home/cache
我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid 。
2、修改squid 日志目录的权限
#chown -R squid:squid /usr/local/squid/var/logs
这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作。
例如生成 access.log cache.log store.log
3、查看你的日志文档 。
#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户 。
#more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中 , 并返回给访问用户 。
#more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户 。
关于 TCP_XXXX 等参数及代表的信息 , 请参看彭勇华《squid中文权威指南》13.2.1 章节 。
当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名 , 同样可以看到access.log里关于该域名的行 。
4、squid -k rotate 轮换squid的日志文件/var/log/squid,Squid代理服务器日志文件
的增长速度是惊人的,很容易点球满磁盘空间导致系统不能正常工作,甚至是死机.为了解决日志文件增长太快的问题,squid采用了"轮换"的方法.在squid.conf中可以通过logfile_rotate来设置文件轮换的个数,如:
logfile_rotate 10 ,轮换的工作一般用crontab定时器完在周期性的日志轮换,例如每周六凌晨2:00进行日志轮换,则执行如下命令: crontab -e
0 2 * * 6 squid -k rotate
关于linux的调试命令和linux调试程序的命令是什么的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读