我们一起来读书吧 关注:157贴子:3,036
  • 1回复贴,共1

《Linux工具快速教程》进阶一 程序调试

只看楼主收藏回复

进程调试
————————————————————————————————
gdb 程序交互调试
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具
从一个完整的调试过程简单说明最基本的几个命令:
gdb programmer # 启动gdb
break main # 设置断点
run # 运行调试程序
next # 单步调试
print var1 # 在调试过程中,我们需要查看当前某个变量值的时候,使用print 命令打印该值
list # 显示当前调试处的源代码
info b # 显示当前断点设置情况
————————————————————————————————
pstack 跟踪栈空间
pstack是一个脚本工具,可显示每个进程的栈跟踪。pstack 命令必须由相应进程的属主或 root 运行
pstrack <program-pid>
————————————————————————————————
strace 分析系统调用
strace常用来跟踪进程执行时的系统调用和所接收的信号
Linux进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备
strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间
比如:
跟踪28979进程的所有系统调用(-e trace=all),花费时间,以及开始时间,最后将记录结果存在output.txt文件里面
strace -o output.txt -T -tt -e trace=all -p 28979
查看进程正在做什么
strace -p <process-pid>


IP属地:北京1楼2025-01-08 10:15回复
    目标文件分析
    nm
    nm用来列出目标文件的符号清单
    nm myProgrammer
    包含可执行代码的段称为正文段
    数据段包含了不可执行的信息或数据
    将目标文件中所包含的不同的部分划分为段
    段可以包含可执行代码、符号名称、初始数据值和许多其他类型的数据
    ————————————————————————————————
    objdump
    用来显示二进制文件的信息,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息
    objdump -d myprogrammer
    ————————————————————————————————
    readelf
    这个工具和objdump命令提供的功能类似,但是它显示的信息更为具体
    readelf -all a.out
    readelf --debug-dump a.out | more
    ————————————————————————————————
    size 查看程序内存占用
    size a.out
    ————————————————————————————————
    file 文件类型查询
    file a.out
    也可以查看Core文件是由哪个程序生成:
    file core.22355
    ————————————————————————————————
    strings 查询数据中的文本信息
    一个文件中包含二进制数据和文本数据,如果只需要查看其文本信息:
    strings <objfile>
    ————————————————————————————————
    fuser 显示文件使用者
    显示所有正在使用着指定的file, file system 或者 sockets的进程信息:
    fuser -m -u ${JUMBO_ROOT}/bin/redis-server
    希望kill所有正在使用某一指定的file:
    fuser –k /path/to/your/filename
    ————————————————————————————————
    xxd 十六进制显示数据
    xxd a.out
    ————————————————————————————————
    od
    使用od命令查看特殊格式的文件内容
    od -Ax -tcx4 a.c


    IP属地:北京2楼2025-01-08 10:36
    回复