自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

跟著小白一起學(xué)鴻蒙—OpenHarmony調(diào)試工具

系統(tǒng) OpenHarmony
OpenHarmony開發(fā)過程中我們一定會面對各種開發(fā)問題,比如如何看log,如何看系統(tǒng)狀態(tài),如何調(diào)試,等等。本章內(nèi)容就是總結(jié)一些常用工具。

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

概述

OpenHarmony開發(fā)過程中我們一定會面對各種開發(fā)問題,比如如何看log,如何看系統(tǒng)狀態(tài),如何調(diào)試,等等。本章內(nèi)容就是總結(jié)一些常用工具。

交叉編譯工具

  • 源碼下載:OH3.1用的5.5,OH3.2升級了5.7,兩者都能用

wget https://releases.linaro.org/components/toolchain/binaries/latest-5/arm-linux-gnueabi/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi.tar.xz

  • 解壓、配置好路徑(這個就不細講了,可自行百度)

GDB

  • 源碼下載
wget https://mirrors.ustc.edu.cn/gnu/gdb/gdb-8.2.1.tar.gz
  • 交叉編譯
//1. 解壓工具鏈
tar xvf gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi.tar.xz

//2. 解壓gdb
tar zxvf gdb-8.2.1.tar.gz

//3. 進入gdb目錄編譯
cd gdb-8.2.1
mkdir build
cd build
../configure CC="/{gcc的路徑}/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc" CXX="/{gcc的路徑}/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++" LDFLAGS=-static --target=arm-linux-gnueabi --host=arm-linux-gnueabi
make -j16
//4. build目錄下gdb/gdb就是可執(zhí)行文件,可以通過file gdb查看文件類型和內(nèi)容
file gdb/gdb
gdb/gdb: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=a20d29b723426dbe06a1b17f66292090f916ad21, with debug_info, not stripped

注意:編譯后的gdb即可傳輸?shù)皆O(shè)備上運行

Valgrind

  • 源碼下載
wget https://sourceware.org/pub/valgrind/valgrind-3.18.0.tar.bz2
  • 交叉編譯
//1. 解壓gdb
tar jxvf valgrind-3.18.0.tar.bz2

//2. 進入valgrind目錄編譯
cd valgrind

//3. 防止編譯文件污染源碼,建立目錄
mkdir build

//4. 進入編譯目錄
cd build
../configure CC="/{gcc的路徑}/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc" CXX="{gcc的路徑}/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++" CPP="/home/wshi/arm-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-cpp" --target=arm-linux-gnueabi --host=arm-linux-gnueabi --prefix=/bin
make -j16
//5. build目錄下coregrind/valgrind就是可執(zhí)行文件,可以通過file命令查看文件類型和內(nèi)容
file coregrind/valgrind
coregrind/valgrind: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=3963fa836d42fa54e0cf3c580792b777267f97eb, with debug_info, not stripped
file memcheck/memcheck-arm-linux
memcheck/memcheck-arm-linux: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, BuildID[sha1]=72fa59dfe03270faca9929d6658cb67379ad546d, with debug_info, not stripped

//6. 由于是DynamicLink,所以需要發(fā)送glib庫到板子上,
hdc_std -t 192.168.137.105:10178 file send /{gcc的路徑}/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/lib/ld-2.21.so /data/local/tmp
hdc_std -t 192.168.137.105:10178 file send /{gcc的路徑}/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/lib/libc-2.21.so /data/local/tmp

//7. 發(fā)送valgrind到板子上,并發(fā)送memcheck-arm-linux到板子,放到/bin/lib/valgrind目錄,如沒有需要自己建目錄,這樣valgrind就能用了

WuKong命令

  • 簡介:OpenHarmony穩(wěn)定性測試自動化工具,通過模擬用戶行為,對OpenHarmony系統(tǒng)及應(yīng)用進行穩(wěn)定性壓力測試。
  • 約束條件:WuKong在OS3.2系統(tǒng)版本后開始預(yù)置使用;OH3.1需要自己手動編譯,命令為:
./build.sh --product-name rk3568 --build-target wukong
  • 編譯后發(fā)到板子上運行
wukong exec -s 10 -i 1000 -a 0.28 -t 0.72 -c 100
  • 對應(yīng)命令解釋

命令

參數(shù)值

說明

wukong exec

主命令。

-s

10

參數(shù)設(shè)置隨機種子,10為種子值。

-i

1000

參數(shù)設(shè)置應(yīng)用拉起間隔,1000單位ms。

-a

0.28

參數(shù)設(shè)置應(yīng)用隨機拉起測試比例28%。

-t

0.72

參數(shù)設(shè)置屏幕隨機touch測試比例為72%。

-c

100

參數(shù)設(shè)置執(zhí)行次數(shù)為100次。

Top命令

實時查看linux進程運行情況的命令:

第一行:進程統(tǒng)計,238個進程,一個正在執(zhí)行(R,top),237個休眠的。

第二行:CPU信息,4核(400%),5%用戶層在用,9%系統(tǒng)層在用。

第三行:具體顯示每個進程信息,包括:

  • PID:進程號
  • USER:進程持有用戶
  • PR:進程優(yōu)先級,數(shù)值越小優(yōu)先級越高
  • NI:進程Nice值,用作優(yōu)先級的修正值
  • VIRT:進程使用的虛擬內(nèi)存
  • RES:進程常駐內(nèi)存
  • SHR:進程使用的共享內(nèi)存
  • S:進程狀態(tài):S,sleep;R,running;I,idle;
  • %MEM:進程使用的內(nèi)存占用比
  • TIME+:進程占用的CPU總時長
  • ARGS:進程名
Tasks: 238 total,   1 running, 237 sleeping,   0 stopped,   0 zombie
Mem: 2011776K total, 1169240K used, 842536K free, 39624704 buffers
Swap: 1048572K total, 337664K used, 710908K free, 316444K cached
400%cpu 5%user 0%nice 9%sys 386%idle 0%iow 0%irq 0%sirq 0%host
PID USER PR NI VIRT RES SHR S[%CPU] %MEM TIME+ ARGS
512 system -3 -8 120M 32M 31M S 5.6 1.6 47:09.18 render_service
32337 root 20 0 5.7M 3.3M 2.7M R 4.3 0.1 0:02.96 top
459 dsoftbus 20 0 3.9G 184M 32M S 2.6 9.3 13:11.60 softbus_server
444 hidumper_se+ 20 0 13M 6.2M 6.0M S 2.6 0.3 12:53.76 hidumper_servic
480 wifi 20 0 5.5M 2.2M 2.2M S 1.6 0.1 15:57.09 wifi_hal_service
1548 10007 5 -15 649M 122M 94M S 0.6 6.2 1:57.38 com.ohos.screenlock
31536 root 20 0 0 0 0 I 0.3 0.0 1:12.82 [kworker/0:0-events_freezable]
2090 20010015 5 -15 637M 132M 84M S 0.3 6.7 1:06.40 com.ohos.settings
2049 20010035 0 -20 643M 122M 77M S 0.3 6.2 1:01.51 ohos.samples.bttest
1532 10004 0 -20 519M 29M 27M S 0.3 1.4 0:31.95 com.ohos.mms
1483 10005 0 -20 516M 26M 24M S 0.3 1.3 0:33.25 com.ohos.settingsdata
436 wifi 20 0 17M 9.0M 9.0M S 0.3 0.4 0:12.66 wifi_manager_se
233 logd 20 0 7.4M 4.0M 2.2M S 0.3 0.2 3:12.76 hilogd
32338 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 [kworker/0:0H-mmc_complete]
32336 root 20 0 5.4M 2.4M 2.1M S 0.0 0.1 0:00.05 sh -
32335 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 [kworker/3:1H]
32331 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 [kworker/2:1H]
32327 root 20 0 5.4M 3.1M 2.8M S 0.0 0.1 0:00.06 sh -
32306 root RT 0 0 0 0 S 0.0 0.0 0:00.01 [irq/93-dwc3]
32302 root 20 0 137M 3.9M 3.4M S 0.0 0.1 0:00.19 hdcd

Pmap命令

通過Top命令,我們發(fā)現(xiàn)dsoftbus虛擬內(nèi)存很大,我們可以使用Pmap命令查看具體信息。

# pmap -x 431
431: softbus_server
Address Kbytes PSS Dirty Swap Mode Mapping
0000d000 8 0 0 0 ----- [anon:guard:30526]
0000f000 132 8 8 0 rw--- [anon:stack:30526]
00030000 8 0 0 0 ----- [anon:guard:30525]
00032000 132 8 8 0 rw--- [anon:stack:30525]
00053000 8 0 0 0 ----- [anon:guard:30524]
00055000 132 8 8 0 rw--- [anon:stack:30524]
00076000 8 0 0 0 ----- [anon:guard:30523]
00078000 132 8 8 0 rw--- [anon:stack:30523]
00099000 8 0 0 0 ----- [anon:guard:30522]
0009b000 132 8 8 0 rw--- [anon:stack:30522]
000bc000 8 0 0 0 ----- [anon:guard:30521]
00bd1000 132 8 8 0 rw--- [anon:stack:30440]
00bf2000 8 0 0 0 r---- sa_main
00bf4000 12 0 0 0 r-x-- sa_main
00bf7000 4 0 0 4 r---- sa_main
00bf8000 4 4 4 0 rw--- sa_main
00c02000 40 40 40 0 rw--- [anon:native_heap:musl]
01dd2000 8 0 0 0 ----- [anon:guard:30309]
01dd4000 132 8 8 0 rw--- [heap]
01df5000 1660 372 364 1288 rw--- [heap]
01f9b000 8 0 0 0 ----- [anon:guard:30308]

Strace命令

  • 源碼下載
wget https://strace.io/files/5.18/strace-5.18.tar.xz
  • 交叉編譯
mkdir build
cd build
../configure CC="/home/wshi/workspace/master-1014/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc" CXX="/home/wshi/workspace/master-1014/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi-g++" --target=arm-linux-gnueabi --host=arm-linux-gnueabi
  • 運行
strace -f -t -p 431 -o trace.strace

Meminfo

  • 運行
# cat /proc/meminfo
MemTotal: 2010244 kB
MemFree: 1158060 kB
MemAvailable: 1412556 kB
Buffers: 1384 kB
Cached: 291748 kB
SwapCached: 0 kB
Active: 41976 kB
Inactive: 525356 kB
Active(anon): 372 kB
Inactive(anon): 311204 kB
Active(file): 41604 kB
Inactive(file): 214152 kB
Active(purg): 0 kB
Inactive(purg): 0 kB
Pined(purg): 0 kB
Unevictable: 37224 kB
Mlocked: 0 kB
SwapTotal: 1048572 kB
SwapFree: 1048572 kB
Dirty: 20 kB
Writeback: 0 kB
AnonPages: 311424 kB
Mapped: 210128 kB
Shmem: 37436 kB
KReclaimable: 39700 kB
Slab: 100004 kB
SReclaimable: 39700 kB
SUnreclaim: 60304 kB
KernelStack: 17664 kB
PageTables: 7380 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2053692 kB
Committed_AS: 5178768 kB
VmallocTotal: 262930368 kB
VmallocUsed: 28216 kB
VmallocChunk: 0 kB
Percpu: 832 kB
Skb: 0 kB
CmaTotal: 16384 kB
CmaFree: 0 kB
GLTrack: - kB
ZspageUsed: 12 kB
  • 識別方法

/proc/meminfo

含義和排查思路

active(anon)

在active anon lru上的page,和樓下項目互相轉(zhuǎn)換

inactive(anon)

在inactive anon lru上的page,特征是只能被交換到swap分區(qū),不可被回收。此項和樓上就是應(yīng)用程序使用malloc和mmap匿名方式來申請并寫后的內(nèi)存,如果這兩項過大,那需要排查應(yīng)用程序的這兩類申請流程,常規(guī)思路如下:1,用top觀察內(nèi)存消耗,初篩進程;2,用pmap分析進程;3,排查tmpfs確認(rèn)

unevictable

此項內(nèi)存在系統(tǒng)內(nèi)存緊張時也不能被回收,這部分如果持續(xù)增長會引起嚴(yán)重問題。此項主要組成如下:1,ram disk或ramfs消耗的內(nèi)存;2,以SHM_LOCK方式申請的shmem;3,用mlock系列函數(shù)管理的內(nèi)存;所以若此項過大,重點看以上內(nèi)容

mlocked

此項也是一種unevictable,所以此項過大查mlock

anonpages

此項是匿名映射頁,注意 anonpages != active(anon)+inactive(anon),因為shmem,tmpfs,雖然屬于其中但是因為有對應(yīng)的內(nèi)存文件所以不屬于anonpages。所以anonpages屬于沒有對應(yīng)文件的內(nèi)存,而active(anon)和inactive(anon)屬于不可回收但可以被交換到swap分區(qū)的內(nèi)存。若此項異常,查看malloc和mmap(PROT_WRITE,MAP_ANON|MAP_PRIVATE)

mapped

此項為用mmap(2)申請的內(nèi)存,且沒被unmmap(包括unmmap(2),及內(nèi)核內(nèi)存回收的unmap。所以此項異常查mmap

shmem

此項即為共享內(nèi)存,尤其是tmpfs。這項思路主要是:1,用top看進程SHR;2,用pmap看進程;3,看tmpfs

slab

此項可分為可被回收的SReclaimable以及不可回收的SUnreclaim,其中不可被回收的slab如果發(fā)生泄漏如kmalloc請求的內(nèi)存沒釋放那就有問題了,排查思路:1,用slabtop查看哪一個slab大;2,排查kmalloc

vmallocused

用vmalloc方式分配的內(nèi)核內(nèi)存,針對此項可查看/proc/vmallocinfo。如果驅(qū)動被卸載則不會在/proc/vmalloc里被發(fā)現(xiàn),則需要查找過往的驅(qū)動。

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2022-08-19 19:02:20

開源鴻蒙操作系統(tǒng)

2023-04-04 09:24:11

鴻蒙HiDumper

2022-12-06 15:39:16

鴻蒙主干代碼

2022-11-29 16:35:02

Tetris鴻蒙

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-28 15:42:39

分布式軟總線鴻蒙

2022-11-22 15:15:46

Wi-Fi鴻蒙

2022-12-05 15:02:14

鴻蒙用戶鑒權(quán)

2022-11-14 17:01:34

游戲開發(fā)畫布功能

2023-03-30 09:32:27

2022-10-10 14:47:04

藍牙應(yīng)用鴻蒙

2023-02-27 16:30:32

鴻蒙開源協(xié)議分析

2023-03-30 09:19:54

SELinux安全子系統(tǒng)

2022-08-29 17:25:19

鴻蒙應(yīng)用開發(fā)

2022-11-24 14:34:41

Hap程序鴻蒙

2023-03-15 16:19:03

BinderIPC工具

2022-10-20 16:40:16

JS應(yīng)用控制LED鴻蒙

2022-10-09 15:05:50

NAPI框架鴻蒙

2023-04-06 09:18:52

鴻蒙AVPlayerAVRecorder

2023-02-24 16:02:45

WebSocket網(wǎng)絡(luò)通訊協(xié)議
點贊
收藏

51CTO技術(shù)棧公眾號