日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第6课 - 开发中的辅助工具

發布時間:2023/12/10 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第6课 - 开发中的辅助工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第6課 - 開發中的輔助工具

1. 什么是軟件開發環境?

  (1)構建環境:代碼編寫、程序編譯、版本控制(可選)

    ? 初級程序開發者往往把軟件開發等同于 代碼編寫 + 程序編譯?,這是狹隘且錯誤的;個人開發只要及時備份即可,團隊開發需要版本控制的協助。

  (2)調試環境:在開發軟件時,不可能一次編寫成功,肯定會出現bug,這就需要調試工具。在軟件開發中,調試工具是用于定位問題的輔助工具集。

  (3)測試環境:用于驗證目標程序是否滿足用戶的顯性需求和隱性需求。

?

2. 嵌入式開發中的時間分配

   代碼編寫及目標構建(20%

   測試、調試、bug修復(80%)?

?

3. 如何提高開發效率?

  工欲善其事,必先利其器。這個 “器” 就是 GNU 為 GCC 編譯器提供的配套的輔助工具集(Binutils:二進制工具包)。

  GNU Binutils官方簡介:??https://www.gnu.org/software/binutils/

  Binutils工具集詳細介紹:https://sourceware.org/binutils/docs-2.28/binutils/index.html

工具名? ? ? ? ? ? ? ? ? ? ? ? ?功能簡介
addr2line? 將代碼地址轉換為對應的程序行號
strip? 剔除可執行程序中的調試信息
ar? 將目標文件打包成靜態庫
nm? 列出目標文件中的符號及對應地址
objdump? 查看程序段信息反匯編
size? 查看目標文件中的段大小
strings? 查看目標文件中的字符串

3.1 addr2line

  (1)addr2line工具的功能

    • 將指定地址轉換為對應的文件名行號
    • 常用于分析和定位內存訪問錯誤的問題

  (2)addr2line使用示例:定位 0 地址訪問

    <1> 開啟core dump選項

      • ulimit? ?-c? ?unlimited

    <2> 運行程序,并生成崩潰時的 core 文件  

      • 執行導致程序崩潰的測試用例

    <3> 讀取 core 文件,獲取 IP 寄存器的值(0x08048000

      • dmesg core

    <4> 使用 addr2line 定位行代碼

      • addr2line? 0x08048000? -f? -e? test.out 

3.2 strip

  (1)strip工具的功能  

    • 剔除可執行程序中的調試信息,較少目標程序的大小
    • 一般在程序發布前都需要將調試信息剔除
    • 過多的調試信息可能影響程序的執行效率 
    • 用法: strip? test.out 

  (2)使用 strip 的注意事項

    • 幾乎所有的調試輔助工具都依賴于目標文件中的調試信息
    • 調試信息的運用能夠快速定位問題
    • 使用 gcc 編譯程序時使用 -g 選項生成調試信息
    • 發布程序時再考慮是否使用 strip 剔除調試信息 

3.3 ar

   打包目標文件

    • ar? crs? libname.a? x.o? y.o  

   解壓目標文件

    • ar? x? libname.a  

3.4 nm

  (1)nm工具的功能

    • 列出目標文件中的標識符(變量名,函數名)
    • 輸出結果由三部分組成:{地址標識符

      示例:

          

?

  (2)段標識說明

段標識? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明
A? 地址值在鏈接過程中不會發生改變
B 或 b? 標識符位于未初始化數據段(.bss)
C? 未定義存儲段的標識符,鏈接時決定段位置
D 或 d? 標識符位于數據段(.data)
N? 調試專用標識符
R 或 r? 標識符位于只讀存儲區(.rdata)
T 或 t? 標識符位于代碼段(.text)
U? 未定義的標識符

3.5 objdump

  (1)objdump工具的功能

    • 反匯編目標文件,查看匯編到源碼的映射

        objdump? -d? func.o

        obidump? -S? func.o

    • 查看目標文件中的詳細段信息  

        obidump? -h? test.out

  (2)objdump? -h 的輸出說明

?? 說明
ldx? 段下標
Name? 段標識符(名字)
Size? 段所占空間的大小
VMA? 段起始位置的虛存地址
LMA? 段在存儲空間中的加載地址
File off? 段在目標文件中的相對位置
Algn? 段的邊界對齊字節數

3.6 size

  size 用于獲取目標文件中的所有段大小

    • size? test.out   

3.7 strings

  strings 用于獲取目標文件中的所有字符串常量

    • strings? test.out  

 

注:本文整理于《狄泰12月提升計劃》課程內容

狄泰QQ群:199546072

轉載于:https://www.cnblogs.com/shiwenjie/p/7923633.html

總結

以上是生活随笔為你收集整理的第6课 - 开发中的辅助工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。