91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

用于分析可執(zhí)行程序和內(nèi)存轉(zhuǎn)儲(chǔ)的命令行工具介紹

桃芯科技 ? 來(lái)源:桃芯科技 ? 2023-11-03 17:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Axf Tool 是桃芯科技一個(gè)用于分析可執(zhí)行程序和內(nèi)存轉(zhuǎn)儲(chǔ)的命令行工具。該工具已集成到 ingWizard 的項(xiàng)目快捷菜單里。

ea18090e-7a26-11ee-939d-92fbcf53809c.png

這個(gè)工具包含多種功能:當(dāng)程序編譯成功后,可進(jìn)行靜態(tài)分析;出現(xiàn) HardFault、Assertion 等問(wèn)題時(shí), 調(diào)用trace_full_dump2生成內(nèi)存轉(zhuǎn)儲(chǔ),再進(jìn)行動(dòng)態(tài)分析。從快捷菜單里運(yùn)行工具雖然方便, 但是功能受限。通過(guò)命令行使用,功能更全面。下面介紹幾種主要的功能。在命令行下通過(guò)axf_tool.exe help {function}可獲得每種功能的詳細(xì)信息。

當(dāng)工具需要讀取編譯后的可執(zhí)行文件時(shí),首先會(huì)自動(dòng)查找,如果未找到,則彈出對(duì)話框,要求選擇可執(zhí)行文件。對(duì)于由 Wizard 生成的 Keil 或者 Gnu 工具鏈項(xiàng)目,工具一般能夠自動(dòng)找到編譯后的可執(zhí)行文件。

當(dāng)工具需要讀取 Dump 文件時(shí),也會(huì)彈出對(duì)話框,要求選擇 Dump 文件。Dump 文件即trace_full_dump2的輸出。工具對(duì)于 Dump 文件的格式要求很低,允許其它內(nèi)容存在。例如, 用串口工具長(zhǎng)時(shí)間保存串口輸出到文件,使用本工具時(shí),不需要清理這個(gè)文件里所包含的其它日志信息 —— 除非其它日志也使用了 Intel Hex 格式。

靜態(tài)分析

stack-usage

靜態(tài)分析棧的使用情況,并報(bào)告棧空間使用最多前 N 條函數(shù)調(diào)用鏈。從快捷菜單調(diào)用時(shí),顯示前 3 條函數(shù)調(diào)用鏈。

借助這個(gè)功能統(tǒng)計(jì)棧用量,避免棧空間越界。開發(fā)者也可以 Web 版調(diào)用圖工具 callgraph (Call Graph Visualization For Gnu Arm Toolchain (ingchips.github.io))圖形化地查看棧用量、最大調(diào)用鏈。

局限性說(shuō)明:

該工具不能保證給出的數(shù)據(jù) 100% 準(zhǔn)確;當(dāng)使用 Keil 時(shí),建議同時(shí)參照 Keil 工具給出的統(tǒng)計(jì)信息,以較大的數(shù)據(jù)為準(zhǔn);

當(dāng)使用了函數(shù)指針時(shí),無(wú)法靜態(tài)確定所要調(diào)用的函數(shù)(報(bào)告中標(biāo)記 unknown),從而無(wú)法進(jìn)行統(tǒng)計(jì),導(dǎo)致結(jié)果偏小。

bt-api-thread-safety

分析對(duì)藍(lán)牙 API 的調(diào)用,檢查是否違反了單線程約定。使用這個(gè)功能時(shí),需要“告訴”工具哪些函數(shù)肯定是只由藍(lán)牙協(xié)議棧所調(diào)用的。—— 這些函數(shù)及只由這些函數(shù)所調(diào)用的函數(shù)就是符合單線程約定的,工具會(huì)把其它函數(shù)羅列出來(lái)供進(jìn)一步確認(rèn)。 從快捷菜單調(diào)用時(shí),只認(rèn)為setup_profile,user_packet_handler,att_read_callback和att_write_callback等 4 個(gè)函數(shù)肯定是只由藍(lán)牙協(xié)議棧所調(diào)用的,符合單線程約定。如果需要“告訴”工具其它函數(shù)也沒問(wèn)題,那么可以使用命令行。比如, 在一個(gè) GATT 客戶端程序里,還有characteristic_discovery_callback等 3 個(gè)函數(shù)也確認(rèn)只是協(xié)議棧的回調(diào)函數(shù), 就可以把這 3 個(gè)也一起作為-bt_cb參數(shù):

axf_tool bt-api-thread-safety -bundle ING9187xx typical v1.9.39 ^
    -app path/to/app/executable ^
    -bt_cb setup_profile user_packet_handler att_read_callback att_write_callback  ^
    characteristic_discovery_callback descriptor_discovery_callback service_discovery_callback

基于 Dump 的動(dòng)態(tài)分析

call-stack

嘗試從內(nèi)存轉(zhuǎn)儲(chǔ)中恢復(fù)出現(xiàn)問(wèn)題時(shí)的函數(shù)調(diào)用棧。 下面某個(gè)ble_hcic_eif:766Assertion 的 Dump 分析, 從中我們看到整個(gè)調(diào)用棧的最底下是prvTaskExitError,這是 FreeRTOS 任務(wù)最底部的樁函數(shù),再往上就是 程序的foo函數(shù),它調(diào)用了藍(lán)牙API gatt_client_write_value_of_characteristic,這違反了協(xié)議棧的單線程約定。

[....] try to load ...
[....] linking
[....] disassembly and loading
[....] linking
[....] loading ....
[INFO] ASSERTION found, more info: https://ingchips.github.io/web_apps/assertion_tool/index.html?q=%5BASSERTION%5D%20%40%20ble_hcic_eif.c%3A766
[ OK ] done
[....] top function @pc is `trace_full_dump`
[....] Call stack:
[....]  0. ├─ `trace_full_dump`
[....]  1. ├─ `cb_assertion+36`                                  (@...)
[....]  ...
[....]  ...
[....]  9. ├─ `gatt_client_write_value_of_characteristic+46`     (@...)
[....] 10. ├─ `foo+354`                                          (@...)
[....] 11. ├─ `prvTaskExitError`                                 (bottom of a FreeRTOS task)
[ OK ] ────┴───── (done)

說(shuō)明:這個(gè)問(wèn)題用 bt-api-thread-safety 也可檢測(cè)出來(lái)。

history

給出 BLE 活動(dòng)簡(jiǎn)史。通過(guò)這個(gè)功能可以觀察出問(wèn)題的前后一小段時(shí)間內(nèi) BLE 活動(dòng)是否正常、是否符合預(yù)期。

下面的分析結(jié)果里的[ OK ] integrity check說(shuō)明相關(guān)的內(nèi)存數(shù)據(jù)基本正常,可以繼續(xù)分析。出問(wèn)題時(shí),程序大致運(yùn)行了 12 小時(shí) 51 分。目前存在一個(gè)連接間隔為 100ms 的連接,以及一個(gè) Legacy 廣播。

[....] try to ...
[....] linking
[....] loading ...
[ OK ] integrity check
current timer (T): 46266487352us (~46266487.352000ms) (~46266.487s) (~126.487)
[....] BLE activities (history & future) in descending order:
┌────┬──────────────┬─────────────────┬────────────┐
│  # │ Task         │            Time │  Duration  │
├────┼──────────────┼─────────────────┼────────────┤
│  0 │ Legacy_ADV   │         T+48420 │       4679 │
├────┼──────────────┼─────────────────┼────────────┤
│  1 │ CONN         │         T+40193 │       6250 │
├────┼──────────────┼─────────────────┼────────────┤
│  2 │ CONN         │             T+0 │      10306 │ <- current
├────┼──────────────┼─────────────────┼────────────┤
│  3 │ CONN         │          T-9807 │       6250 │
├────┼──────────────┼─────────────────┼────────────┤
│  4 │ CONN         │         T-19974 │      10167 │
├────┼──────────────┼─────────────────┼────────────┤
│  5 │ CONN         │         T-29974 │      10306 │
├────┼──────────────┼─────────────────┼────────────┤
...

check-heap

嘗試檢查堆的健康狀態(tài)。這項(xiàng)功能支持多種堆:

FreeRTOS 提供的heap_4;

既支持軟件包內(nèi)置的 FreeRTOS,也支持外置 —— 前提:使用了相同或相近版本的heap_4。

Link Layer 內(nèi)的堆。

check-task

在內(nèi)存轉(zhuǎn)儲(chǔ)的幫助下動(dòng)態(tài)檢查 FreeRTOS 里的各個(gè)任務(wù)的情況,包含任務(wù)狀態(tài)、棧用量等。對(duì)于棧用量統(tǒng)計(jì),與stack-usage相比,優(yōu)點(diǎn)是可以統(tǒng)計(jì)出stack-usage無(wú)法識(shí)別的函數(shù)指針等情況, 缺點(diǎn)是只能統(tǒng)計(jì)已執(zhí)行的代碼。

既支持軟件包內(nèi)置的 FreeRTOS,也支持外置 —— 前提:FreeRTOS 版本相同或相近。

Q&A

我的程序使用的是舊版本的 SDK,如果使用這個(gè)工具?

可以使用命令行。打開舊版本 Wizard 的 Options 窗口,進(jìn)入 SDK 頁(yè)面,確認(rèn)軟件包版本號(hào), 比如 ING9187xx 的 typical v1.7.8。安裝新版 SDK,進(jìn)入 axf_tool 目錄,以命令行方式使用,如:

 axf_tool call-stack -bundle ING9187xx typical v1.7.8 ^
     -app path/to/app/executable ^
     -dump path/to/dump/file

審核編輯:湯梓紅

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

    關(guān)注

    8

    文章

    3122

    瀏覽量

    75248
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3826

    瀏覽量

    82961
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    33974
  • 命令行
    +關(guān)注

    關(guān)注

    0

    文章

    81

    瀏覽量

    10572
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    dos模式下使用命令行模式調(diào)用c語(yǔ)言程序編譯后的可執(zhí)行文件

    `dos模式下使用命令行模式調(diào)用c語(yǔ)言程序編譯后的可執(zhí)行文件,可執(zhí)行文件的文件名不能有空格,如果是帶參數(shù)的main函數(shù),直接在可執(zhí)行文件之后
    發(fā)表于 01-07 14:06

    Mini shell命令行調(diào)試工具的相關(guān)資料分享

    @mini shell命令行調(diào)試工具介紹Mini shell 命令行調(diào)試工具(單片機(jī)、c語(yǔ)言)Mini shell是一個(gè)特別適合低
    發(fā)表于 01-24 08:15

    實(shí)用 Linux 命令行使用技巧集錦

    下面介紹的都是一些命令行工具,這些工具在日常工作中都很有用。
    的頭像 發(fā)表于 03-21 14:42 ?5029次閱讀

    Setup軟件安裝可執(zhí)行程序工具免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Setup軟件安裝可執(zhí)行程序工具免費(fèi)下載。 etup.exe是電腦的可執(zhí)行進(jìn)程文件,在正常情況下setup.exe表示為系統(tǒng)的安裝文件setup.exe,
    發(fā)表于 11-13 08:00 ?11次下載

    Xilinx軟件命令行工具:XSCT開發(fā)和調(diào)試

    了解如何使用XSCT,Xilinx軟件命令行工具進(jìn)行開發(fā)和調(diào)試。 該視頻演示了XSCT如何充當(dāng)Xilinx SDK的命令行控制臺(tái)。
    的頭像 發(fā)表于 11-21 06:02 ?1.5w次閱讀

    Xilinx軟件命令行工具進(jìn)行開發(fā)和調(diào)試

    了解如何使用XSCT,Xilinx軟件命令行工具進(jìn)行開發(fā)和調(diào)試。 該視頻演示了XSCT如何充當(dāng)Xilinx SDK的命令行控制臺(tái)。
    的頭像 發(fā)表于 11-22 06:53 ?7161次閱讀

    Git常見的誤區(qū)和命令行工具等綜述

    Git常見的誤區(qū)和命令行工具等綜述
    發(fā)表于 08-31 09:51 ?0次下載

    mini shell命令行調(diào)試工具(單片機(jī)、c語(yǔ)言)

    @mini shell命令行調(diào)試工具介紹Mini shell 命令行調(diào)試工具(單片機(jī)、c語(yǔ)言)Mini shell是一個(gè)特別適合低
    發(fā)表于 11-29 10:21 ?10次下載
    mini shell<b class='flag-5'>命令行</b>調(diào)試<b class='flag-5'>工具</b>(單片機(jī)、c語(yǔ)言)

    Golang基于flag庫(kù)實(shí)現(xiàn)一個(gè)命令行工具

    Golang 標(biāo)準(zhǔn)庫(kù)中的 flag 庫(kù)提供了解析命令行選項(xiàng)的能力,我們可以基于此來(lái)開發(fā)命令行工具
    的頭像 發(fā)表于 10-28 09:26 ?1567次閱讀

    新的開源命令行工具west

    電子發(fā)燒友網(wǎng)站提供《新的開源命令行工具west.zip》資料免費(fèi)下載
    發(fā)表于 11-11 09:25 ?0次下載
    新的開源<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>west

    Fcoder從命令行批量轉(zhuǎn)換為TIFF

    命令行批量轉(zhuǎn)換為TIFF 2TIFF圖像轉(zhuǎn)換軟件是一個(gè)專業(yè)的命令行實(shí)用程序用于以批處理模式將辦公文檔和圖像轉(zhuǎn)換為TIFF。基于簡(jiǎn)單的命令行
    的頭像 發(fā)表于 05-22 14:13 ?1112次閱讀
    Fcoder從<b class='flag-5'>命令行</b>批量轉(zhuǎn)換為TIFF

    介紹Go里面經(jīng)常使用到的命令行工具

    優(yōu)秀的工具配合熟練的使用,往往可以讓開發(fā)效率大幅度提升,本小節(jié)介紹 Go 里面經(jīng)常使用到的命令行工具
    的頭像 發(fā)表于 05-22 16:58 ?1586次閱讀
    <b class='flag-5'>介紹</b>Go里面經(jīng)常使用到的<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>

    pycharm命令行終端運(yùn)行代碼

    。 PyCharm的命令行終端允許開發(fā)者在IDE中直接執(zhí)行命令,并查看輸出結(jié)果。通過(guò)使用命令行終端,開發(fā)者可以在不離開PyCharm的情況下運(yùn)行代碼、調(diào)試程序
    的頭像 發(fā)表于 11-22 11:20 ?6002次閱讀

    eclipse怎么使用命令行

    命令行中使用Eclipse來(lái)完成一些特定的任務(wù)。本文將詳細(xì)介紹如何在命令行中使用Eclipse。 首先,我們需要確保已經(jīng)正確安裝了JDK(Java Development Kit)和Eclipse
    的頭像 發(fā)表于 12-06 11:26 ?3718次閱讀

    idea如何輸入命令行參數(shù)

    在許多軟件開發(fā)和系統(tǒng)管理的任務(wù)中,我們經(jīng)常需要向應(yīng)用程序傳遞命令行參數(shù)。命令行參數(shù)是在運(yùn)行時(shí)傳遞給程序的值,用于指定
    的頭像 發(fā)表于 12-06 15:01 ?1672次閱讀
    主站蜘蛛池模板: 四虎成人免费网站在线 | 色www| 天天操 夜夜操 | 国产私拍视频 | 欧美影院入口 | 美女操网站| 亚洲精品色图 | 手机在线你懂的 | 在线观看国产久青草 | 国产成人小视频 | 午夜影院啊啊啊 | 婷婷久久综合九色综合98 | 啪啪激情综合 | ww欧洲ww欧洲视频 | 天堂网在线资源www最新版 | 国产女人18毛片水真多18精品 | 亚洲综合国产一区二区三区 | 五月天婷婷在线视频国产在线 | 欧美潘金莲一级风流片a级 欧美片欧美日韩国产综合片 | 色偷偷视频 | 在线免费看黄 | 午夜视频在线观看免费观看在线观看 | 一日本道加勒比高清一二三 | 天堂资源吧 | 成 人网站免费 | 色噜噜狠狠狠色综合久 | 女人张开双腿让男人桶完整 | 高h污快穿文汁水四溅 | 欧美日韩伦理 | 日本free护士姓交 | 欧美天天性影院 | 亚洲天天做夜夜做天天欢人人 | 正在播放91大神调教偷偷 | 免费在线视频播放 | 老司机狠狠k免费毛片 | 激情六月婷婷 | 国产视频久 | 福利视频亚洲 | 欧美一级一一特黄 | 欧美在线观看www | 午夜剧场毛片 |