在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

全志R128芯片F(xiàn)reeRTOS系統(tǒng)支持的軟件調(diào)試方法介紹

冬至子 ? 來源:丨budboool ? 作者:丨budboool ? 2023-11-23 17:45 ? 次閱讀

棧回溯

棧回溯是指獲取程序的調(diào)用鏈信息,通過棧回溯信息,能幫助開發(fā)者快速理清程序執(zhí)行流程,提高分析問題的效率。

用途

  1. 獲取程序調(diào)用關(guān)系,理清程序執(zhí)行流程。
  2. 在系統(tǒng)觸發(fā)異常時(shí),快速分析異常所在位置及其調(diào)用鏈。
  3. 在分析某任務(wù)卡死原因時(shí),可以通過對(duì)該任務(wù)進(jìn)行棧回溯,快速分析卡死點(diǎn)。
  4. 分析某些資源如 sem、mutex 的獲取、釋放信息。

配置

Kernel Options ??? >
    Backtrace Select (debug backtrace by machine code) ??? >
        (X) debug backtrace by machine code  // 通過解析機(jī)器碼方式進(jìn)行回溯
        ( ) debug backtrace by frame pointer // 通過解析frame pointer方式進(jìn)行回溯
        ( ) no backtrace                     // 關(guān)閉棧回溯

接口介紹

int backtrace(char *taskname, void *output[], int size, int offset, print_function print_func);

參數(shù):

  • taskname : 任務(wù)名字;可為NULL,表示回溯當(dāng)前任務(wù)
  • output : 棧回溯結(jié)果保存數(shù)組,可以為NULL
  • size : output數(shù)組大小,可為0
  • offset : 棧回溯保存結(jié)果的偏移,可為0
  • print_func : 打印函數(shù),可用printf

返回值:

  • level : 回溯層次

終端命令

在設(shè)備端的終端界面上支持使用 backtrace 命令對(duì)指定的任務(wù)進(jìn)行回溯。

作用:查看指定任務(wù)堆棧回溯信息
用法:backtrace [taskname]

回溯信息解析

  1. 在 PC 端開發(fā)環(huán)境中,在 FreeRTOS SDK 根目錄下,執(zhí)行 source envsetup.sh
  2. 在 PC 端開發(fā)環(huán)境中,在 FreeRTOS SDK 的 lichee/rtos 目錄下創(chuàng)建 backtrace.txt 文件,然后將回溯信息從終端中拷貝出來,并保存到 backtrace.txt 文件中。
  3. 在 PC 端開發(fā)環(huán)境中,執(zhí)行 callstack backtrace.txt 命令,會(huì)獲取以下回溯信息。
    mhd_start_scan at /xxx/mhd_apps_scan.c:334 #mhd_start_scan表示函數(shù)名,/xxx/mhd_apps_scan.c表示函數(shù)所在的文件路徑,334表示函數(shù)調(diào)用處的行號(hào)。
    mhd_softap_start at /xxx/mhd_apps_softap.c:263
    wifi_recv_cb at /xxx/mhd_api_test.c:624
    mhd_get_host_sleep at /xxx/mhd_apps_wifi.c:81
    bswap_16 at /xxx/aw?alsa?lib/bswap.h:39
    (inlined by) convert_from_s16 at ??:?
    linear_init at /xxx/pcm_rate_linear.c:378
    resampler_basic_interpolate_single at /xxx/resample_speexdsp.c:395
    __fill_vb2_buffer at /xxx/videobuf2?v4l2.c:392
    cci_read at /xxx/cci_helper.c:728
    ecdsa_signature_to_asn1 at /xxx/ecdsa.c:294
    cmd_wifi_fwlog at /xxx/mhd_api_test.c:449 # 函數(shù)調(diào)用順序?yàn)閺南碌缴希碿md_wifi_fwlog ?> ecdsa_signature_to_asn1 ?> cci_read ... ?> mhd_start_scan

注意事項(xiàng)

請(qǐng)確保執(zhí)行解析命令時(shí)所指定的 rt_system.elf 為系統(tǒng)固件所對(duì)應(yīng)的 rt_system.elf 文件,否則解析后的棧回溯信息無(wú)法確保正確。

addr2line 分析

發(fā)生異常時(shí),如果棧回溯失敗,可以通過 addr2line 工具,對(duì)打印出來的棧上數(shù)據(jù)進(jìn)行分析,從而確定棧回溯信息。需要注意的是,使用該方法調(diào)試的開發(fā)人員,需要提前了解一些 ARM 體系架構(gòu)和入棧出棧等相關(guān)知識(shí)。

用途

在棧回溯失敗時(shí),使用 addr2line 從棧上數(shù)據(jù)中分析棧回溯信息。

用法

發(fā)生異常時(shí)當(dāng)前棧內(nèi)容打印如下:

dump stack memory:
0x40940f18: 0x40639028 0x4099ba68 0x00000000 0x00000000
0x40940f28: 0x00000000 0x00000000 0x00000000 0x00000000
0x40940f38: 0x00000000 0x00000000 0x00000000 0x00000000
0x40940f48: 0x00000000 0x00000000 0x00000000 0x00000000
0x40940f58: 0x00000000 0x00000000 0x00000000 0x00000000
0x40940f68: 0x00000000 0x00000000 0x00000000 0x00000000
0x40940f78: 0x00000000 0x00000000 0x00000000 0x00000000
0x40940f88: 0x00000000 0x00000000 0x00000000 0x00000000
0x40940f98: 0x00000000 0x404f3680 0x00000001 0x4099ba68
0x40940fa8: 0x4099ba68 0x00000001 0x4099b628 0x00000542
0x40940fb8: 0x4099bb68 0x40141388 0x4099ba68 0x404f3680
0x40940fc8: 0x4099a628 0x4099ba68 0x4099bb6a 0x40142214
0x40940fd8: 0x40141e2c 0x00000000 0x40141e2c 0xdeadbeef
0x40940fe8: 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef
0x40940ff8: 0xdeadbeef 0x400d88b4 0x00000000 0x0001b63d

對(duì)所有的內(nèi)存數(shù)據(jù)使用下列命令進(jìn)行分析。

$(SDK_ROOT)/lichee/rtos/tools/gcc?arm?melis?eabi?8?2019?q3?update/bin/arm?melis?eabi?addr2line ?a address ?e rt_system.elf ?f

# SDK_ROOT 表示SDK根目錄
# ?f:顯示函數(shù)名
# ?a:address為打印出來的地址
# ?e:程序文件

分析

對(duì)于無(wú)法解析的內(nèi)存數(shù)據(jù)予以丟棄后,可得到以下有效的分析信息。

0x40141388
msh_exec
/xxx/finsh_cli/msh.c:415

0x40142214
finsh_thread_entry
/xxx/finsh_cli/shell_entry.c:746
# 函數(shù)調(diào)用關(guān)系finsh_thread_entry ? > msh_exec

內(nèi)存泄露分析

FreeRTOS 系統(tǒng)提供輕量級(jí)的內(nèi)存泄露分析功能,啟動(dòng)內(nèi)存泄露分析后,每當(dāng)申請(qǐng)內(nèi)存時(shí),將該內(nèi)存塊掛入鏈表中,釋放時(shí)將其從鏈表中摘除。最終還存在于鏈表之中的,便是可疑的內(nèi)存泄露點(diǎn)。

用途

可用于分析、定位 FreeRTOS 系統(tǒng)的內(nèi)存泄露問題。

配置

System components ??? >
    aw components ??? >
        Memleak Components Support ??? >
            [*] Tina RTOS Memleak #使能內(nèi)存泄露分析工具
            (16) Tina RTOS Memleak Backtrace Level @ 內(nèi)存泄露分析棧回溯層數(shù)

終端命令

memleak

作用:內(nèi)存泄露分析
用法:
    memleak 1 使能內(nèi)存泄露分析,記錄所有內(nèi)存塊申請(qǐng)信息
    memleak 0 關(guān)閉內(nèi)存泄露分析,刪除所有內(nèi)存塊的申請(qǐng)信息
    memleak 1 thread_name1 thread_name2 使能內(nèi)存泄露分析,記錄指定任務(wù)的內(nèi)存塊申請(qǐng)信息
    memleak show 不關(guān)閉內(nèi)存泄露分析,打印出所有內(nèi)存塊申請(qǐng)信息

memallocate

作用:查看指定任務(wù)的內(nèi)存泄露分析信息
用法:memallocate thread_name

內(nèi)存泄露 log 分析

關(guān)閉內(nèi)存泄露檢測(cè)時(shí),會(huì)打印可疑的內(nèi)存泄露點(diǎn)及其回溯信息,開發(fā)者可根據(jù)回溯信息,參考棧回溯章節(jié)進(jìn)行分析。

001: ptr = 0x404c7800, size = 0x00000400.
    backtrace : 0x401da778
    backtrace : 0x4013cd78
    backtrace : 0x4013b190
    backtrace : 0x401b7c44
    backtrace : 0x401e1854

# ptr : 存留在鏈表中的內(nèi)存塊地址
# size : 存留在鏈表中的內(nèi)存塊大小
# backtrace : 申請(qǐng)?jiān)搩?nèi)存塊時(shí)的棧回溯信息

內(nèi)存重復(fù)釋放檢查

FreeRTOS 系統(tǒng)提供輕量級(jí)的內(nèi)存重復(fù)釋放分析功能,在內(nèi)存堆管理器初始化完成之后,使能內(nèi)存重復(fù)釋放檢測(cè)功能,每當(dāng)申請(qǐng)內(nèi)存時(shí),將該內(nèi)存塊掛入鏈表中,釋放時(shí)將其從鏈表中摘除。如果釋放一個(gè)不存在于該鏈表中的內(nèi)存塊時(shí),說明之前已經(jīng)釋放過該塊內(nèi)存,則本次釋放即為內(nèi)存重復(fù)釋放。

用途

分析是否存在內(nèi)存重復(fù)釋放,以及找到第 2 次釋放同一個(gè)內(nèi)存塊的調(diào)用鏈信息

配置

System components ??? >
    aw components ??? >
        Memleak Components Support ??? >
            [*] Tina RTOS Memleak #使能內(nèi)存泄露分析工具
            [*] Tina RTOS Double Free Check #使能內(nèi)存重復(fù)釋放檢查

內(nèi)存重復(fù)釋放 log 分析

double free checked!!!
backtrace : 0x401da778
backtrace : 0x4013cd78
backtrace : 0x4013b190
backtrace : 0x401b7c44
backtrace : 0x401e1854

出現(xiàn) double free checked!!! 即表示存在內(nèi)存重復(fù)釋放現(xiàn)象,打印出來的棧回溯信息是第二次釋放該內(nèi)存塊時(shí)的調(diào)用鏈信息。

系統(tǒng)崩潰異常分析

系統(tǒng)崩潰異常主要是指 CPU 因非法地址訪問、指令譯碼錯(cuò)誤等原因,進(jìn)入了異常模式,表現(xiàn)形式為系統(tǒng)打印異常棧信息和寄存器信息。

Arm M33 Star CPU 軟件異常分析

M33 CPU 異常類型

M33 是采用 ARMv8m 指令集架構(gòu)的處理器,其軟件異常處理類型符合 ARMv8m 軟件異常類型。其異常類型如下:

  1. Bus Fault。觸發(fā)該異常的原因有:取指失敗(prefetch abort)、數(shù)據(jù)讀/寫失敗(data abort)。BFSR 寄存器會(huì)保存產(chǎn)生 bus fault 的原因。
  2. MemManage Fault。觸發(fā)該異常的原因有:訪問 MPU 設(shè)置區(qū)域覆蓋范圍之外的地址、往只讀region 寫數(shù)據(jù)、用戶級(jí)下訪問了只允許在特權(quán)級(jí)下訪問的地址、在不可執(zhí)行的存儲(chǔ)器區(qū)域試圖取指。MFSR 寄存器保存產(chǎn)生該異常的原因,MMSR 寄存器保存了導(dǎo)致異常的地址。
  3. User Fault。觸發(fā)該異常的原因有:執(zhí)行了未定義的指令、嘗試進(jìn)入 ARM 狀態(tài)、使用 LDRM/STRM 多重加載/存儲(chǔ)指令時(shí),地址沒有對(duì)齊、除數(shù)為零、任何未對(duì)齊的訪問。UFSR 寄存器保存了產(chǎn)生該異常的原因。其中需要注意一點(diǎn),device memory 在任何情況下都不允許非對(duì)齊訪問。
  4. Hard Fault。觸發(fā)該異常的原因有:Bus fault、MemManage Fault 以及用法 fault 上訪的結(jié)果、在異常處理中讀取異常向量表時(shí)產(chǎn)生的總線 fault 也按硬 fault 處理。HFSR 寄存器保存了產(chǎn)生該異常的原因。

M33 CPU 軟件異常分析方法

  1. 確認(rèn)異常類型。
  2. 棧回溯分析。棧回溯是指在系統(tǒng)崩潰之后,會(huì)打印發(fā)生異常時(shí)的棧回溯信息,供開發(fā)者進(jìn)行分析,可參考棧回溯章節(jié)進(jìn)行分析

崩潰 log 分析

# appos pstack:0x8146480 msp:0x81fffd0 psp:0x81464a0
# appos pstack 表示異常發(fā)生后經(jīng) CPU 硬件入棧后 SP 寄存器的值,也表明了異常發(fā)生時(shí)正在使用哪個(gè)棧
# msp 表示異常發(fā)生后 msp 寄存器的值
# psp 表示異常發(fā)生后 psp 寄存器的值,異常發(fā)生時(shí) SP = psp/msp ? 0x40 (64個(gè)字節(jié)用來保存異常后的寄存器現(xiàn)場(chǎng))
# msplim/psplim : 異常現(xiàn)場(chǎng)的 msplim 和 psplim 寄存器的值
# usage fault happen : 表示此時(shí)觸發(fā) usage(user) fault
# cause:undefine instruction 表示是觸發(fā)了 user fault 中的非法指令異常
# CPU registers: 表示異常現(xiàn)場(chǎng)通用寄存器的值
# backtrace information : 表示異常現(xiàn)場(chǎng)的棧回溯信息
# 剩下信息表示對(duì)應(yīng)地址的值

exception:6 happen!!
appos pstack:0x8146480 msp:0x81fffd0 psp:0x81464a0
msplim:0x0 psplim:0x8142550
usage fault happen, UFSR:0x1, cause:undefine instruction
CPU registers:
R00:[081464A0]: 0x00000001
R01:[081464A4]: 0x083adf48
R02:[081464A8]: 0x00000001
R03:[081464AC]: 0x080cf115
R04:[08146480]: 0x083adec0
R05:[08146484]: 0x083ae000
R06:[08146488]: 0x0811b574
R07:[0814648C]: 0x00000000
R08:[08146490]: 0x08080808
R09:[08146494]: 0x09090909
R10:[08146498]: 0x10101010
R11:[0814649C]: 0x11111111
R12:[081464B0]: 0x00000000
R13(SP):[081464C0]: 0x081464c0
R14(LR):[081464B4]: 0x080c8d95
R15(PC):[081464B8]: 0x080cf114
xPSR:[081464BC]: 0x61000000
SHCSR:0x00070008 step:0
????backtrace information????
backtrace : 0X080CF115
backtrace fail!
backtrace : 0X080C8D92
backtrace : 0X080C6C66
backtrace : 0X080C7CE0
backtrace : 0X080DAD25
?????????????????????????????
stack info:
[081464C0]: 0x003adec0 0x0844ae00 0x08130eb0 0x080c6c69
[081464D0]: 0x0813e470 0x080d8bcf 0x10000000 0x00000000
[081464E0]: 0x00000000 0x00000006 0x0813e220 0x0813e470
[081464F0]: 0x05050505 0x0813e140 0x05050505 0x0813e180
[08146500]: 0x07070707 0x08080808 0x09090909 0x10101010
[08146510]: 0x11111111 0x080c7ce3 0x080c6afb 0x08130eb0
[08146520]: 0x10101010 0x11111111 0x0813e180 0x01010101
.......
[LR]:0x80c8d95
[080C8B90]: 0xf73bbaa5 0xf73bbaa1 0xf73bba9d 0xe92dba99
[080C8BA0]: 0x28024ff0 0x4605b085 0xdc06468a 0x30e0f64a
[080C8BB0]: 0x000ff6c0 0xf837f008 0x2810e008 0xf64add0c
.......

RISC?V CPU 軟件異常分析

image-20230523093417010

在 RISCV 架構(gòu)中,該類問題的分析方法如下:

  1. 確認(rèn)異常類型。
  2. 棧回溯分析。棧回溯是指在系統(tǒng)崩潰之后,會(huì)打印發(fā)生異常時(shí)的棧回溯信息,供開發(fā)者進(jìn)行分析,可參考棧回溯章節(jié)進(jìn)行分析
  3. 查看 sepc 寄存器。當(dāng)系統(tǒng)發(fā)生異常時(shí),會(huì)將異常指令的地址保存到 sepc 寄存器中。如果 sepc明顯是一個(gè)非法的指令地址,可查看 ra 寄存器來確定異常地址
  4. 反編譯查看異常指令,確定異常的直接原因并進(jìn)行分析。常用反編譯方法 riscv64?unknown?elf?objdump ?d xxx.elf。xxx.elf 需要根據(jù) sepc 寄存器的值,確認(rèn)其所屬模塊,然后選定對(duì)應(yīng)的elf 文件。

部分采用 RISC?V 指令集的芯片不一定會(huì)運(yùn)行 S 模式,只會(huì)運(yùn)行 M 模式,所以此處所指的 sepc 和 mepc 可根據(jù)實(shí)際情況進(jìn)行替換,其他 RISC?V 寄存器同理

# EXC_STORE_PAGE_FAULT: 回寫數(shù)據(jù)訪問頁(yè)面異常,可參考[RISCV異常分析]來分析
# gprs : 通用寄存器的值
# sepc : 異常發(fā)生時(shí)pc寄存器的值
# sstatus : 異常發(fā)生時(shí)sstaus寄存器的值
# sscratch : 異常發(fā)生時(shí)sscratch寄存器的值
# backtrace : 異常發(fā)生時(shí)棧回溯信息
# dump stack memory : 異常發(fā)生時(shí)棧的數(shù)據(jù)內(nèi)容
# dump sepc memory : 異常發(fā)生時(shí)sepc地址指向的數(shù)據(jù)內(nèi)容

=====================================================================================================
EXC_BREAKPOINT
=====================================================================================================
gprs:
x0:0x0000000000000000 ra:0x0000000008252828 sp:0x000000000844aef0 gp:0x00000000083695b0
tp:0x0000000000000000 t0:0x0000000000000009 t1:0x0000000000000002 t2:0x0000000000000000
s0:0x000000000844af00 s1:0x0000000000000000 a0:0x0000000000000001 a1:0x000000000844af00
a2:0x0000000000000000 a3:0x0000000000000000 a4:0x0000000000000000 a5:0x0000000008252162
a6:0x0000000000000000 a7:0x0000000000000008 s2:0x0000000000000001 s3:0x000000000844b180
s5:0x0000000000000800 s5:0x0000000008329c88 s6:0x00000000082fca88 s7:0xa5a5a5a5a5a5a5a5
s8:0xa5a5a5a5a5a5a5a5 s9:0xa5a5a5a5a5a5a5a5 s10:0xa5a5a5a5a5a5a5a5 s11:0xa5a5a5a5a5a5a5a5
t3:0x0000000000000022 t4:0x000000000844af08 t5:0x000000000000003b t6:0x0000000000000020
other:
mepc :0x0000000008252162
mcause :0x0000000000000003
mtval :0x0000000000000000
mstatus :0x0000000a00003980
mscratch:0x0000000000000000
???????backtrace???????????
backtrace : 0X08252162
backtrace : invalid lr(0000000000000000)
backtrace : 0X08252826
backtrace : 0X08251D52
backtrace : 0X082520B4
backtrace : 0X082F6694
???????????????????????????
== > Round [1] <==
Total Heap Size : 4587992 Bytes ( 4480 KB)
Free : 3893696 Bytes ( 3802 KB)
Min Free : 3851104 Bytes ( 3760 KB)
dump_memory:stack
0x000000000844AE70: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
0x000000000844AE80: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
0x000000000844AE90: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
0x000000000844AEA0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
0x000000000844AEB0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
0x000000000844AEC0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
0x000000000844AED0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
0x000000000844AEE0: 0x00000800 0x00000000 0x0825281c 0x00000000
0x000000000844AEF0: 0x00000000 0x00000001 0x0844b005 0x00000000
0x000000000844AF00: 0x0844b000 0x00000000 0x00000000 0x00000000
.......
dump_memory:mepc
0x00000000082520E6: 0xbfb90084 0xfe07871b 0x0ff77713 0x05e00693
0x00000000082520F6: 0xf4e6e8e3 0x0ff00713 0xf4e404e3 0x0084d78b
0x0000000008252106: 0x74132405 0xbf2d0ff4 0xf4067179 0xe42af022
.......
dump_memory:x1
0x0000000008252818: 0xe61ff0ef 0x691cc519 0x85a2c789 0x9782854a
0x0000000008252828: 0x30834485 0x34032281 0x85262201 0x21013903
0x0000000008252838: 0x21813483 0x23010113 0x71198082 0xeccef4a6
0x0000000008252848: 0x0010c497 0x45448493 0x0010c997 0x44898993
0x0000000008252858: 0xf0caf8a2 0x0009a403 0x0004a903 0xe0dae8d2
0x0000000008252868: 0xf862fc5e 0xf06af466 0xe4d6fc86 0x8b2aec6e
0x0000000008252878: 0xe4028bae 0x0014d797 0x4607a223 0x000d8c17
0x0000000008252888: 0x124c0c13 0x06800a13 0x03a00c93 0x03f00d13
.......
dump_memory:x3
0x00000000083695A0: 0x082c9752 0x00000000 0x00000000 0x00000000
0x00000000083695B0: 0x00000000 0x00000000 0x08348148 0x00000000
0x00000000083695C0: 0x00000000 0x00000000 0x082c8b80 0x00000000
0x00000000083695D0: 0x082cab12 0x00000000 0x00000000 0x00000000
0x00000000083695E0: 0x08349070 0x00000000 0x00000000 0x00000000
0x00000000083695F0: 0x082d19ce 0x00000000 0x082d174c 0x00000000
0x0000000008369600: 0x00000000 0x00000000 0x0834caa8 0x00000000
0x0000000008369610: 0x00000000 0x00000000 0x00000000 0x00000000
.......

斷點(diǎn)調(diào)試

斷點(diǎn)調(diào)試是指利用 CPU 的硬件斷點(diǎn)或者軟件斷點(diǎn)來進(jìn)行調(diào)試,通過對(duì)指定的地址設(shè)置斷點(diǎn),當(dāng)程序執(zhí)行到該地址時(shí),觸發(fā)軟件取指異常,再根據(jù)異常信息進(jìn)行分析。通過使用該方法,可以迅速判斷程序是否執(zhí)行到指定的地址。目前該功能僅在使用 M33 Star CPU 的芯片上支持。

用途

可用于分析軟件執(zhí)行流程,以及快速分析函數(shù)調(diào)用參數(shù)、返回值等。

配置

System components ??? >
    aw components ??? >
        Watchpoint Components Support ??? >
            [*] Tina RTOS Watchpoint # 使用斷點(diǎn)與觀察點(diǎn)

終端命令

作用 : 設(shè)置程序斷點(diǎn),當(dāng)前僅使用硬件斷點(diǎn)
用法 : breakpoint [set | remove] addr
    set : 設(shè)置斷點(diǎn)
    remove : 取消斷點(diǎn)
    addr : 在該地址設(shè)置斷點(diǎn)

接口介紹

設(shè)置斷點(diǎn)

int gdb_set_hw_break(unsigned long addr);

參數(shù)

  • addr : 待設(shè)置斷點(diǎn)的地址

返回值 - 0 : 設(shè)置斷點(diǎn)成功 - ?1 : 設(shè)置斷點(diǎn)失敗

移除斷點(diǎn)

int gdb_remove_hw_break(unsigned long addr);

參數(shù)

  • addr : 待移除斷點(diǎn)的地址

返回值

  • 0 : 移除斷點(diǎn)成功
  • -1 : 移除斷點(diǎn)失敗

斷點(diǎn)異常分析

斷點(diǎn)異常分析,可參考系統(tǒng)崩潰異常分析章節(jié)進(jìn)行分析。

觀察點(diǎn)調(diào)試

觀察點(diǎn)調(diào)試是指利用 CPU 的硬件觀察點(diǎn)來進(jìn)行調(diào)試,通過對(duì)指定的地址設(shè)置指定屬性的觀察點(diǎn),當(dāng) CPU 對(duì)該地址進(jìn)行指定屬性的操作時(shí),會(huì)觸發(fā)數(shù)據(jù)訪問異常,然后再根據(jù)異常信息進(jìn)行分析。通過使用該方法,可以迅速判斷某塊內(nèi)存是否被修改、讀取或者訪問。目前該功能僅在使用 M33 Star CPU 的芯片上支持。

觀察點(diǎn)屬性表

屬性

作用

write

監(jiān)視寫操作

read

監(jiān)視讀操作

access

監(jiān)視訪問操作,包括讀和寫

用途

可用于分析某塊內(nèi)存處是否被篡改等問題。

配置

System components ??? >
    aw components ??? >
        Watchpoint Components Support ??? >
            [*] Tina RTOS Watchpoint # 使用斷點(diǎn)與觀察點(diǎn)

終端命令

作用 : 設(shè)置硬件觀察點(diǎn),當(dāng)前僅使用硬件斷點(diǎn)
用法 : watchpoint [write | read | access | remove] addr
    write : 監(jiān)視寫操作
    read : 監(jiān)視讀操作
    access : 監(jiān)視訪問操作
    remove : 取消觀察點(diǎn)
    addr : 在該地址設(shè)置/取消觀察點(diǎn)

接口介紹

設(shè)置觀察點(diǎn)

int gdb_set_hw_watch(unsigned long addr, enum gdb_bptype type);

參數(shù)

  • addr : 待設(shè)置斷點(diǎn)的地址
  • type : 觀察點(diǎn)類型

返回值

  • 0 : 設(shè)置觀察點(diǎn)成功
  • ?1 : 設(shè)置觀察點(diǎn)失敗

移除觀察點(diǎn)

int gdb_remove_hw_watch(unsigned long addr);

參數(shù)

  • addr : 待移除觀察點(diǎn)的地址

返回值

  • 0 : 移除觀察點(diǎn)成功
  • ?1 : 移除觀察點(diǎn)失敗

觀察點(diǎn)異常分析

觀察點(diǎn)異常分析,可參考系統(tǒng)崩潰異常分析章節(jié)進(jìn)行分析。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19833

    瀏覽量

    233950
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9328

    瀏覽量

    375711
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5427

    瀏覽量

    123730
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    492

    瀏覽量

    63927
  • RISC-V
    +關(guān)注

    關(guān)注

    46

    文章

    2513

    瀏覽量

    48412
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    R128 BLE最高吞吐量測(cè)試正確配置測(cè)試方法

    R128使用前我們需要了解BLE的最高吞吐量,以方便評(píng)估相關(guān)功能的開發(fā)。
    的頭像 發(fā)表于 10-27 17:17 ?1804次閱讀
    <b class='flag-5'>全</b><b class='flag-5'>志</b><b class='flag-5'>R128</b> BLE最高吞吐量測(cè)試正確配置測(cè)試<b class='flag-5'>方法</b>

    R128內(nèi)存泄漏調(diào)試案例分享

    硬件:R128 軟件FreeRTOS + rtplayer\_test(Cedarx)+ AudioSystem
    的頭像 發(fā)表于 11-20 17:27 ?1351次閱讀
    <b class='flag-5'>全</b><b class='flag-5'>志</b><b class='flag-5'>R128</b>內(nèi)存泄漏<b class='flag-5'>調(diào)試</b>案例分享

    詳解R128 RTOS安全方案功能

    /sys_partition.fex功能介紹R128 FreeRTOS 系統(tǒng)支持如下安全功能 安全硬件下圖是 ARM 為 M33 Sta
    發(fā)表于 12-28 15:59

    R128入門編寫HelloWorld

    本文將介紹使用 R128 開發(fā)板從串口輸出 HelloWorld 的方式介紹 SDK 軟件開發(fā)流程。 載入方案我們使用的開發(fā)板是 R128-
    發(fā)表于 12-29 09:39

    R128硬件設(shè)計(jì)指南①

    信號(hào),使 SOC復(fù)位,軟件系統(tǒng)重新啟動(dòng)。 R128硬件系統(tǒng)組成如下表: [td]系統(tǒng)說明 CPU小系統(tǒng)
    發(fā)表于 01-04 09:23

    R128 SDK架構(gòu)與目錄結(jié)構(gòu)

    R128 S2 是提供的一款 M33(ARM)+C906(RISCV-64)+HIFI5(Xtensa) 三核異構(gòu) SoC,同時(shí)芯片內(nèi)部 SIP 有 1M SRAM、8M LSPS
    發(fā)表于 01-05 10:05

    R128系統(tǒng)RTOS使用說明

    ;&gt;help獲取系統(tǒng)支持的終端命令 backtrace查看指定任務(wù)堆棧回溯信息 code"&gt;backtrace [taskname
    發(fā)表于 01-05 10:22

    R128 Devkit開發(fā)板原理圖模塊介紹及使用說明

    :CH341SER.EXE 購(gòu)買鏈接 百問科技淘寶店 - R128 DevKit 原理圖模塊介紹R128 模組
    發(fā)表于 01-17 09:45

    R128芯片 如何在FreeRTOS下對(duì)代碼源文件進(jìn)行快速預(yù)處理?

    1.主題FreeRTOS_R128_如何對(duì)代碼源文件進(jìn)行快速預(yù)處理2.問題背景硬件:R128軟件FreeRTOS客戶在日常的開發(fā)過程中,會(huì)碰到源文件中有許多的宏或許多條件編譯的代碼,
    發(fā)表于 03-17 10:23

    R128開發(fā)經(jīng)驗(yàn)分享】啟用USB ADB以及無(wú)線ADB配置方法

    首先在FreeRTOS的環(huán)境下,選擇r128_c906_pro: source envsetup.sh lunch_rtos r128s2_pro_c906 USB ADB的配置比較常規(guī),注意以下
    發(fā)表于 10-24 17:29

    R128內(nèi)存泄漏調(diào)試案例

    內(nèi)存泄露調(diào)試案例 問題背景 硬件:R128 軟件FreeRTOS + rtplayer_test(Cedarx)+ AudioSystem 問題復(fù)現(xiàn) 復(fù)現(xiàn)步驟: rtplayer_t
    發(fā)表于 11-20 16:54

    R128內(nèi)存泄露調(diào)試案例

    內(nèi)存泄露調(diào)試案例 問題背景 硬件:R128 軟件FreeRTOS + rtplayer_test(Cedarx)+ AudioSystem 問題復(fù)現(xiàn) 復(fù)現(xiàn)步驟: rtplayer_t
    發(fā)表于 12-11 10:57

    R128適配ST7789v LCD

    R128 平臺(tái)提供了 SPI DBI 的 SPI TFT 接口,具有如下特點(diǎn)
    的頭像 發(fā)表于 10-23 11:26 ?1461次閱讀
    <b class='flag-5'>全</b><b class='flag-5'>志</b><b class='flag-5'>R128</b>適配ST7789v LCD

    R128啟用USB ADB以及無(wú)線ADB配置方法

    首先在FreeRTOS的環(huán)境下,選擇r128\_c906\_pro
    的頭像 發(fā)表于 11-01 11:43 ?1629次閱讀
    <b class='flag-5'>全</b><b class='flag-5'>志</b><b class='flag-5'>R128</b>啟用USB ADB以及無(wú)線ADB配置<b class='flag-5'>方法</b>

    DshanMCU-R128s2 SDK 架構(gòu)與目錄結(jié)構(gòu)

    R128 S2 是提供的一款 M33(ARM)+C906(RISCV-64)+HIFI5(Xtensa) 三核異構(gòu) SoC,同時(shí)芯片內(nèi)部 SIP 有 1M SRAM、8M LSPS
    的頭像 發(fā)表于 12-22 15:57 ?1130次閱讀
    DshanMCU-<b class='flag-5'>R128</b>s2 SDK 架構(gòu)與目錄結(jié)構(gòu)
    主站蜘蛛池模板: 亚洲福利一区福利三区 | 欧美.成人.综合在线 | 美女又黄又免费 | 天堂在线天堂最新版在线www | 色丁香在线| 天天艹天天 | 91男人| 免费人成黄页在线观看日本 | 人人插人人费 | 免费一级毛片在级播放 | 色五月在线视频 | 天堂tv亚洲tv日本tv欧美人tv | 操天天 | 日韩免费精品一级毛片 | 美女被羞羞产奶视频网站 | 日日舔夜夜操 | 黄色视屏在线免费观看 | 久久国产精品免费专区 | 国产乱子伦 | 色中文字幕 | sis色中色 | 一日本道加勒比高清一二三 | 欧美色图综合网 | 日本一区二区三区视频在线 | 国产欧美精品一区二区色综合 | 国产精品久久久久久久久免费观看 | 欧美美女被日 | 日本一区二区三区视频在线 | 日本丶国产丶欧美色综合 | 国产成人三级视频在线观看播放 | 欧美18性欧美丶黑吊 | 一级特黄毛片 | 日本一线a视频免费观看 | 性欧美网站 | 天天做天天爱天天操 | 亚洲六月丁香六月婷婷花 | 最好看的最新中文字幕2018免费视频 | 午夜福利国产一级毛片 | 色婷婷精品大全在线视频 | 精品在线一区二区三区 | 欧美三级黄 |