基于監(jiān)視器的調試
出處:維庫電子市場網 發(fā)布于:2023-08-07 15:36:39
本文的主題有點像是一門即將消亡的藝術:基于監(jiān)視器的調試。什么是基于監(jiān)視器的調試?首先,它假設您的應用程序正在使用某種監(jiān)視器啟動的系統(tǒng)上運行。啟動監(jiān)視器是應用程序駐留的基礎平臺,如果應用程序崩潰,監(jiān)視器將接管。
當在 ROM 中時
基于監(jiān)視器的調試依賴于處理器內置的功能,并且在大多數(shù)情況下(并非總是),這需要能夠寫入指令空間。通常,在監(jiān)視器的命令行界面 (CLI) 中設置斷點,然后將控制權移交給應用程序。如果執(zhí)行設置斷點的指令,則會從應用程序中取出一個分支,并將控制權返回到監(jiān)視器的 CLI?,F(xiàn)在,監(jiān)視器具有顯示內存的能力,可能是單步執(zhí)行,甚至可能返回到斷點所在位置的應用程序。
聽起來不錯吧?嗯,確實可以,但是可能會出現(xiàn)很多并發(fā)癥,例如:
如何顯示內存?通常,監(jiān)視器可以將原始內存顯示為 1、2 或 4 字節(jié)單元的塊,但您必須以十六進制指定地址。由于您在目標的 CLI 上運行,因此您所能做的可能就是參考鏈接器生成的輸出映射文件來確定符號在 data/bss 地址空間中的位置。您必須將符號與某個十六進制地址相關聯(lián)。如果構建發(fā)生變化,內存映射也會發(fā)生變化,因此下次您想要查看同一塊數(shù)據(jù)時,您必須再次進行地址到符號的關聯(lián)。此外,監(jiān)視器不知道如何以您想要的格式顯示,例如短整型、長整型和字符串。忘記結構顯示。
怎么設置斷點呢?與上一個問題類似,首先查找函數(shù)的地址,然后發(fā)出一些命令,例如“b 0x123456”,其中 0x123456 是要設置斷點的函數(shù)的地址。
一旦斷點發(fā)生,監(jiān)視器如何與串口通信?監(jiān)視器因斷點而接管;但應用程序現(xiàn)在擁有串行端口。如果監(jiān)視器重新初始化串行端口以供使用,則應用程序和該端口之間的接口可能會混亂。這意味著將控制權返回給應用程序將非常困難。
監(jiān)視器如何暫時關閉應用程序?當應用程序在 RTOS 上運行、啟用中斷并配置各種不同的外設時,這會變得很棘手。
單步執(zhí)行現(xiàn)在處于匯編程序級別,而不是 C 語言級別。這對于程序員來說不是很有用。
也許這可以解釋為什么基于監(jiān)視器的調試不再流行。不過,在我們放棄之前,我想重新研究一下這個話題,看看這頭老野獸是否還剩下一些氣息。
調試理念
讓我們從設定一些界限開始。我們必須接受這樣一個事實:基于監(jiān)視器的調試環(huán)境有局限性。在我們建立了一些指導方針并重新思考其中一些事情的完成方式之后,我想您會同意仍然有相當多的能力。那么讓我們建立一個啟動監(jiān)視器的調試模型。我們得到什么,又犧牲什么?
對于內存顯示,我們將能夠顯示“類似 C”的數(shù)據(jù):字符串、字符、短整型、整數(shù)、長整型,甚至數(shù)據(jù)結構。數(shù)據(jù)結構可以單獨顯示、以表格或鏈接列表的形式顯示。我們將能夠以符號方式引用數(shù)據(jù)。這意味著名為“SysTick”的全局變量可以被引用為“SysTick”,而無需知道它在內存中的位置。我們將進行運行時分析,將斷點作為其功能之一,而不是在典型斷點的范圍內進行思考。有終止應用程序執(zhí)行的標準斷點和用于運行時分析的“自動返回”斷點。監(jiān)視器捕獲斷點或異常后,可以進行符號堆棧跟蹤。
我們將無法訪問源代碼行號信息;然而,如果編譯器支持轉儲混合源代碼和匯編代碼的能力,那么我們就可以解決這個問題。我們不會考慮單步執(zhí)行,因為它是匯編級別的;然而,如果我們實現(xiàn)其他一切,匯編級單步執(zhí)行是一個方便的贈品。由于我們只能訪問全局變量,因此堆棧跟蹤將不會顯示傳遞的參數(shù),也無法從堆棧中檢索本地數(shù)據(jù)。該調試器的一個也是重要的限制是,在硬斷點之后控制權無法返回到正在運行的應用程序。
如果這些考慮因素可以接受,終的結果就是一個與應用程序一起存在的調試環(huán)境。它可以隨產品一起提供并在現(xiàn)場使用,并且在某種程度上獨立于編譯器工具集、使用的 RTOS,并且在一定程度上獨立于 CPU 和硬件。
版權與免責聲明
凡本網注明“出處:維庫電子市場網”的所有作品,版權均屬于維庫電子市場網,轉載請必須注明維庫電子市場網,http://www.hbjingang.com,違反者本網將追究相關法律責任。
本網轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品出處,并自負版權等法律責任。
如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網聯(lián)系,否則視為放棄相關權利。
- 保險絲與 TVS 前后放置位置之爭2025/9/4 16:15:50
- 保護接地和保護接零的區(qū)別及適用范圍2025/9/2 17:07:04
- 10kV配電系統(tǒng)繼電保護配置與整定值計算2025/8/13 16:24:26
- 全面解析斷路器越級跳閘:原因、處理與要點總結2025/7/30 16:25:03
- IGBT 元件短路與過電壓保護的關鍵要點解析2025/7/24 15:49:28









