天天看点

nanopim3文件系统支持strace和gdb

这篇文章主要讲,如何根据源码,编译后安装到nanopim3的文件系统中。把strace和gdb安装好了之后,那么linux用户态的调试手段基本准备就绪了。本文使用的 源码,基本都是接近最新版本的。

  • nanopim3文件系统支持strace

strace源码路径https://github.com/strace/strace/releases

下载源码包strace-5.0.tar.xz,解压进入strace根目录/xxx/strace-5.0,

编译前配置交叉编译工具链和生成路径如下:

./configure --prefix=/home/jqh/work/pkg_strace --host=arm-linux CC=arm-linux-gcc

然后直接开始编译make -j8;安装make install;

然后查看安装目录编译出来的strace文件,

[email protected]:~/work/pkg_strace$ ls -R

bin  share

./bin:

strace  strace-graph  strace-log-merge

./share/man:

man1

将strace可执行文件直接拷贝到文件系统中,运行,发现缺少动态库librt.so.1和libpthread.so.0。说明之前做的文件系统依赖的动态库还不够全,现在需要将缺少的这两个动态库拷贝到/lib目录下。

然后再次执行strace -help命令发现已经能够正常使用。

[[email protected] ~]#strace -help

usage: strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]...

              [-a column] [-o file] [-s strsize] [-P path]...

              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]

   or: strace -c[dfw] [-I n] [-e expr]... [-O overhead] [-S sortby]

              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]

查看一下版本,

[[email protected] ~]#strace -V

strace -- version 5.0

Copyright (c) 1991-2019 The strace developers <https://strace.io>.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Optional features enabled: (none)

这里增加strace命令是为了后续调试用户态程序。构建基本的调试命令和手段。

  • nanopi3文件系统支持gdb

Gdb源码路径ftp://sourceware.org/pub/gdb/snapshots/current/

本文下载的是gdb-8.2版本的代码,解压进入gdb-8.2根目录/home/jqh/work/gdb-8.2,

编译前配置交叉编译工具链和安装路径:

./configure --prefix=/home/jqh/work/gdb_dir --host=arm-linux CC=arm-linux-gcc

然后直接编译make -j4;安装make install;

查看安装目录:

bin  include  lib  share

将bin目录下的文件拷贝到文件系统中,运行gdb,并查看版本。

《如果缺少库文件,可以使用命令

[email protected]:~/work/nanopim3_uboot$ arm-linux-ldd --root /home/jqh/work/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root nanopi3_rootfs_V1/usr/bin/gdb

        libdl.so.2 => /lib/libdl.so.2 (0xdeadbeef)

        libc.so.6 => /lib/libc.so.6 (0xdeadbeef)

        ld-linux-armhf.so.3 => /lib/ld-linux-armhf.so.3 (0xdeadbeef)

        libm.so.6 => /lib/libm.so.6 (0xdeadbeef)

,来查看可执行程序依赖哪些库文件,然后参考前文,在对应的路径去取库文件》

[[email protected] ~]#gdb -v

GNU gdb (GDB) 8.2

Copyright (C) 2018 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

至此,基本的调试工具已经悉数安装到文件系统中了。为后续用户态调试打好基础。

继续阅读