精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用于分析可執行程序和內存轉儲的命令行工具介紹

桃芯科技 ? 來源:桃芯科技 ? 2023-11-03 17:00 ? 次閱讀

Axf Tool 是桃芯科技一個用于分析可執行程序和內存轉儲的命令行工具。該工具已集成到 ingWizard 的項目快捷菜單里。

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

這個工具包含多種功能:當程序編譯成功后,可進行靜態分析;出現 HardFault、Assertion 等問題時, 調用trace_full_dump2生成內存轉儲,再進行動態分析。從快捷菜單里運行工具雖然方便, 但是功能受限。通過命令行使用,功能更全面。下面介紹幾種主要的功能。在命令行下通過axf_tool.exe help {function}可獲得每種功能的詳細信息

當工具需要讀取編譯后的可執行文件時,首先會自動查找,如果未找到,則彈出對話框,要求選擇可執行文件。對于由 Wizard 生成的 Keil 或者 Gnu 工具鏈項目,工具一般能夠自動找到編譯后的可執行文件。

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

靜態分析

stack-usage

靜態分析棧的使用情況,并報告棧空間使用最多前 N 條函數調用鏈。從快捷菜單調用時,顯示前 3 條函數調用鏈。

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

局限性說明:

該工具不能保證給出的數據 100% 準確;當使用 Keil 時,建議同時參照 Keil 工具給出的統計信息,以較大的數據為準;

當使用了函數指針時,無法靜態確定所要調用的函數(報告中標記 unknown),從而無法進行統計,導致結果偏小。

bt-api-thread-safety

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

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 的動態分析

call-stack

嘗試從內存轉儲中恢復出現問題時的函數調用棧。 下面某個ble_hcic_eif:766Assertion 的 Dump 分析, 從中我們看到整個調用棧的最底下是prvTaskExitError,這是 FreeRTOS 任務最底部的樁函數,再往上就是 程序的foo函數,它調用了藍牙API gatt_client_write_value_of_characteristic,這違反了協議棧的單線程約定。

[....] 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)

說明:這個問題用 bt-api-thread-safety 也可檢測出來。

history

給出 BLE 活動簡史。通過這個功能可以觀察出問題的前后一小段時間內 BLE 活動是否正常、是否符合預期。

下面的分析結果里的[ OK ] integrity check說明相關的內存數據基本正常,可以繼續分析。出問題時,程序大致運行了 12 小時 51 分。目前存在一個連接間隔為 100ms 的連接,以及一個 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

嘗試檢查堆的健康狀態。這項功能支持多種堆:

FreeRTOS 提供的heap_4;

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

Link Layer 內的堆。

check-task

在內存轉儲的幫助下動態檢查 FreeRTOS 里的各個任務的情況,包含任務狀態、棧用量等。對于棧用量統計,與stack-usage相比,優點是可以統計出stack-usage無法識別的函數指針等情況, 缺點是只能統計已執行的代碼。

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

Q&A

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

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

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    2903

    瀏覽量

    73546
  • 程序
    +關注

    關注

    115

    文章

    3720

    瀏覽量

    80361
  • 編譯
    +關注

    關注

    0

    文章

    646

    瀏覽量

    32672
  • 命令行
    +關注

    關注

    0

    文章

    76

    瀏覽量

    10368
收藏 人收藏

    評論

    相關推薦

    dos模式下使用命令行模式調用c語言程序編譯后的可執行文件

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

    Mini shell命令行調試工具的相關資料分享

    @mini shell命令行調試工具介紹Mini shell 命令行調試工具(單片機、c語言)Mini shell是一個特別適合低
    發表于 01-24 08:15

    求分享用于查看SWD的Windows命令行工具

    的配置項,然后將 SWO 行輸出從目標流式傳輸到標準輸出或命名文件。明確地說,我不需要 GUI 工具,這是為了在沒有 GUI 可能性的情況下在自動化下運行,我只需要將調試 printf() 發送到文件。我知道 ST-LINK 實用程序可以以 GUI 形式
    發表于 02-03 10:12

    實用 Linux 命令行使用技巧集錦

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

    Setup軟件安裝可執行程序工具免費下載

    本文檔的主要內容詳細介紹的是Setup軟件安裝可執行程序工具免費下載。 etup.exe是電腦的可執行進程文件,在正常情況下setup.exe表示為系統的安裝文件setup.exe,
    發表于 11-13 08:00 ?11次下載

    Xilinx軟件命令行工具:XSCT開發和調試

    了解如何使用XSCT,Xilinx軟件命令行工具進行開發和調試。 該視頻演示了XSCT如何充當Xilinx SDK的命令行控制臺。
    的頭像 發表于 11-21 06:02 ?1.4w次閱讀

    Xilinx軟件命令行工具進行開發和調試

    了解如何使用XSCT,Xilinx軟件命令行工具進行開發和調試。 該視頻演示了XSCT如何充當Xilinx SDK的命令行控制臺。
    的頭像 發表于 11-22 06:53 ?6467次閱讀

    Git常見的誤區和命令行工具等綜述

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

    Golang基于flag庫實現一個命令行工具

    Golang 標準庫中的 flag 庫提供了解析命令行選項的能力,我們可以基于此來開發命令行工具
    的頭像 發表于 10-28 09:26 ?1178次閱讀

    新的開源命令行工具west

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

    Fcoder從命令行批量轉換為TIFF

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

    介紹Go里面經常使用到的命令行工具

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

    pycharm命令行終端運行代碼

    。 PyCharm的命令行終端允許開發者在IDE中直接執行命令,并查看輸出結果。通過使用命令行終端,開發者可以在不離開PyCharm的情況下運行代碼、調試程序
    的頭像 發表于 11-22 11:20 ?3318次閱讀

    eclipse怎么使用命令行

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

    idea如何輸入命令行參數

    在許多軟件開發和系統管理的任務中,我們經常需要向應用程序傳遞命令行參數。命令行參數是在運行時傳遞給程序的值,用于指定
    的頭像 發表于 12-06 15:01 ?824次閱讀