第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课 - 开发中的辅助工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四川省中职计算机考试题,(四川省计算机等
- 下一篇: HTML5CSS3网页设计仿微信通讯录页