linux c 中debug 远比coding 重要,下面我们就介绍一下 strace,gdb,readelf , objdump 的 用途和各自的用处。
如果需要追踪程序的run的追踪 就需要用到,gdb 和 strace 但是 gdb 的trace link 比较麻烦如果是嵌入需要设置gdb server 这个比较麻烦,所以在程序追踪上strace 是比较方便的, 他比较小巧不需要server 但是没有gdb 那样 认为可控(gdb 可以断点 运行)。 如果需要最总程序运行到那里停止在哪了。 这非常方便。
gdb 在调试 core dump 上非常有用,这个不需要gdb server 只要你把kernel 开了core dump 的文件 limt -c 2M echo filename> //proc/sys/kernel/core_pattern 这样只要产生了core dump 的文件 就可以 再放回到编译的地方 去调试 就可以得到 core dump产生的地方了。
readelf 可以查看程序的文件符号 (包括函数 变量 和 引用的lib 的符号信息)
objdump 和readelf 一样 可以查看 程序的符号表。
lsof 是查看系统打开的文件 的工具。
一般而言根据这些信息就可确定 出错的 地方。