简介
Strace 是一个强大的进程行为跟踪工具,当怀疑某个进程运行异常的时候,比如死锁,CPU 高或者莫名卡顿等,可以使用 strace 查看该进程发起的系统调用和接收到的信号,从而确定问题所在。当然也可以利用 strace 去学习了解进程的运行流程,调用库以及参数和统计。那么如何在 OpenHarmony 里编译使用此工具就是我们这篇文章要分享的话题。
编译构建
- 下载:从https://github.com/strace 下载最新源码
//下载地址
wget https://github.com/strace/strace/releases/download/v6.6/strace-6.6.tar.xz
- 安装编译环境
//编译工具链(32位)
sudo apt-get install gcc-arm-linux-gnueabi
//ohos的源码下载后,其实也有对应的工具链,位置如下
prebuilts/gcc/linux-x86/arm(32位)/gcc-linaro-7.5.0-arm-linux-gnueabi/bin
- 编译
//设置环境变量
export CC=arm-linux-gnueabi-gcc
export CFLAGS=-static
export CPPFLAGS=-static
export LDFLAGS='-static -pthread'
//配置
./configure CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-cpp LD=arm-linux-gnueabi-ld RANLIB=arm-linux-gnueabi-ranlib --host=arm-linux --target=arm-linux --enable-mpers=no
//编译
make
//strip
arm-linux-gnueabi-strip strace
- 运行测试
//传到板子上
hdc_std.exe shell mount -o rw,remount /
hdc_std.exe file send strace /system/bin
hdc_std.exe shell chmod +x /system/bin/strace
//运行测试
hdc_std.exe shell
# strace --help
Usage: strace [-ACdffhiqqrtttTvVwxxyyzZ] [-I N] [-b execve] [-e EXPR]...
[-a COLUMN] [-o FILE] [-s STRSIZE] [-X FORMAT] [-P PATH]...
[-p PID]... [--seccomp-bpf]
{
-p PID | [-DDD] [-E VAR=VAL]... [-u USERNAME] PROG [ARGS] }
or: strace -c[dfwzZ] [-I N] [-b execve] [-e EXPR]... [-O OVERHEAD]
[-S SORTBY] [-P PATH]... [-p PID]... [--seccomp-bpf]
{
-p PID | [-DDD] [-E VAR=VAL]... [-u USERNAME] PROG [ARGS] }
General:
-e EXPR a qualifying expression: OPTION=[!]all or OPTION=[!]VAL1[,VAL2]...
options: trace, abbrev, verbose, raw, signal, read, write, fault,
inject, status, kvm
Startup:
-E VAR=VAL, --env=VAR=VAL
put VAR=VAL in the environment for command
-E VAR, --env=VAR
remove VAR from the environment for command
-p PID,