[導(dǎo)讀] 一、前言這篇文章來聊聊大名鼎鼎的GDB,它的豪門背景咱就不提了,和它的兄弟GCC一樣是含著金鑰匙出生的,在GNU的家族中的地位不可撼動(dòng)。相信每位嵌入式開發(fā)工程師都使用過gdb來調(diào)試程序,如果你說沒有用過,那只能說明你的開發(fā)經(jīng)歷還不夠坎坷,還需要繼續(xù)被BUG吊打。我們都知道,在使用...
一、前言 這篇文章來聊聊大名鼎鼎的GDB ,它的豪門背景咱就不提了,和它的兄弟GCC 一樣是含著金鑰匙出生的,在GNU 的家族中的地位不可撼動(dòng)。相信每位嵌入式開發(fā)工程師都使用過gdb來調(diào)試 程序,如果你說沒有用過,那只能說明你的開發(fā)經(jīng)歷還不夠坎坷,還需要繼續(xù)被 BUG吊打。 我們都知道,在使用gcc編譯時(shí),可以使用-g 選項(xiàng)在可執(zhí)行文件中嵌入更多的調(diào)試信息,那么具體嵌入了哪些調(diào)試信息?這些調(diào)試信息是如何與二進(jìn)制的指令之間進(jìn)行相互交互?在調(diào)試的時(shí)候,調(diào)試信息中是如何獲取函數(shù)調(diào)用棧中的上下文信息? 針對(duì)上面這些疑惑,道哥用兩篇文章把這些底層最深處的問題徹底描述清楚,讓你一次看過癮。 第一篇文章,就是當(dāng)前這一篇,主要內(nèi)容是介紹GDB的底層調(diào)試原理 ,我們來看一下GDB是通過什么機(jī)制來控制被調(diào)試程序的執(zhí)行順序。 第二篇文章,我們選擇一個(gè)體積小巧、五臟俱全的LUA 語言來進(jìn)行剖析,從源代碼分析到函數(shù)調(diào)用棧,從指令集到調(diào)試庫的修改 ,一網(wǎng)打盡。 內(nèi)容比較多,看完本文需要的時(shí)間可能長(zhǎng)一些,為了您的健康,不建議在處于蹲姿的時(shí)候閱讀這篇文章。 二、GDB調(diào)試模型 GDB調(diào)試包括2個(gè)程序:gdb程序和被調(diào)試程序。根據(jù)這2個(gè)程序是否運(yùn)行在同一臺(tái)電腦中,可以把GDB的調(diào)試模型分為2種: 本地調(diào)試 遠(yuǎn)程調(diào)試 本地調(diào)試 :調(diào)試程序和被調(diào)試程序運(yùn)行在同一臺(tái)電腦中 。遠(yuǎn)程調(diào)試 :調(diào)試程序運(yùn)行在一臺(tái)電腦 中,被調(diào)試程序運(yùn)行在另一臺(tái)電腦 中。關(guān)于可視化調(diào)試程序并不是重點(diǎn),它只是一個(gè)用來封裝GDB的外殼而已。我們既可以用黑乎乎的終端窗口來手動(dòng)輸入調(diào)試命令;也可以選擇集成開發(fā)環(huán)境(IDE),這個(gè)IDE中已經(jīng)嵌入了器 調(diào)試,這樣就可以使用各種button來代替手動(dòng)輸入調(diào)試命令了。 與本地調(diào)試相比,遠(yuǎn)程調(diào)試中多了一個(gè)GdbServer 程序,它和目標(biāo)程序都是運(yùn)行在目標(biāo)機(jī) 中,可能是一臺(tái)x86電腦或者是一個(gè)ARM板子。圖中的紅線表示GDB與GdbServer之間通過網(wǎng)絡(luò)或者串口進(jìn)行通訊。既然是通訊,那么肯定需要一套通訊協(xié)議:RSP協(xié)議 ,全稱是:GDB Remote Serial Protocol(GDB遠(yuǎn)程通信協(xié)議)。 關(guān)于通訊協(xié)議的具體格式和內(nèi)容,我們不需要關(guān)心,只需要知道:它們都是字符串 ,有固定的開始字符('$')和結(jié)束字符('#'),最后還有兩個(gè)十六進(jìn)制的ASCII字符作為校驗(yàn)和,了解這么多就足夠了。至于更多的細(xì)節(jié),如果實(shí)在閑的XX可以瞄幾眼,其實(shí)這些協(xié)議,就像社會(huì)中各種奇葩的規(guī)定一樣,都是一幫磚家在廁所里想出來的。 在第二篇講解LUA的文章中,我們會(huì)實(shí)現(xiàn)一個(gè)類似的遠(yuǎn)程調(diào)試原型。其中的通信協(xié)議也是字符串,直接把 HTTP 協(xié)議進(jìn)行簡(jiǎn)化之后就拿過來使用了,十分清晰、方便。 三、GDB調(diào)試指令 為了完整性,這里把部分GDB調(diào)試指令貼一下,有感性認(rèn)識(shí)即可。 另外,這里沒有列舉所有的指令,列出的指令都是常用的,比較容易理解。在講解LUA的時(shí)候,我們會(huì)選擇其中的某些指令進(jìn)行詳細(xì)的對(duì)比,包括底層的實(shí)現(xiàn)機(jī)制。 每一個(gè)調(diào)試指令都有很多的命令選項(xiàng),例如斷點(diǎn)相關(guān)的就包括:設(shè)置斷點(diǎn)、刪除斷點(diǎn)、條件斷點(diǎn)、臨時(shí)停用啟用 等等。這篇文章的重點(diǎn)是理解gdb底層的調(diào)試機(jī)制,所以應(yīng)用層的這些指令的使用方法就不再列出了,網(wǎng)絡(luò)上的資源很多。 四、GDB與被調(diào)試程序之間的關(guān)系 為了方便描述,先寫一個(gè)最最簡(jiǎn)單的C 程序: #include int main (int argc, char *argv[]) { int a = 1 ; int b = 2 ; int c = a b; printf ("c = %d \n" , c); return 0 ; } 編譯命令: $ gcc -g test.c -o test 我們對(duì)可執(zhí)行程序 test 進(jìn)行調(diào)試,輸入命令: $ gdb ./test 輸出如下: 在最后一行可以看到光標(biāo)在閃爍,這是gdb程序在等著我們給它下達(dá)調(diào)試命令呢。 當(dāng)上面這個(gè)黑乎乎的終端窗口在執(zhí)行g(shù)db ./test的時(shí)候,在操作系統(tǒng)里發(fā)生了很多復(fù)雜的事情: 系統(tǒng)首先會(huì)啟動(dòng)gdb進(jìn)程 ,這個(gè)進(jìn)程會(huì)調(diào)用系統(tǒng)函數(shù)fork()來創(chuàng)建一個(gè)子進(jìn)程 ,這個(gè)子進(jìn)程做兩件事情: 調(diào)用系統(tǒng)函數(shù)ptrace(PTRACE_TRACEME,[其他參數(shù)]); 通過execc來加載、執(zhí)行可執(zhí)行程序test,那么test程序就在這個(gè)子進(jìn)程中開始執(zhí)行了。 補(bǔ)充一點(diǎn):文中有時(shí)稱之程序,有時(shí)稱之進(jìn)程。“程序”描述的是一個(gè)靜態(tài) 的概念,就是一堆數(shù)據(jù)躺著硬盤上,而“進(jìn)程”描述的是動(dòng)態(tài) 的過程,是這個(gè)程序被讀取、加載到內(nèi)存上之后,在操作系統(tǒng)中有一個(gè)任務(wù)控制塊(一個(gè)數(shù)據(jù)結(jié)構(gòu)),專門用來管理這個(gè)進(jìn)程的。 鋪墊了半天,終于輪到主角登場(chǎng)了,那就是系統(tǒng)調(diào)用函數(shù)ptrace (其中的參數(shù)后面會(huì)解釋),正是在它的幫助下,gdb才擁有了強(qiáng)大的調(diào)試能力。函數(shù)原型是: #include long ?ptrace (enum ?__ptrace_request?request,?pid_t ?pid,?void ?*addr,?void ?*data) ;我們先來看一下 man 中對(duì)這個(gè)函數(shù)的簡(jiǎn)介: tracer 就是調(diào)試程序,可以理解為gdb程序;tracee 就是被調(diào)試程序,對(duì)應(yīng)于圖中的目標(biāo)程序test。一般喜歡用-er和-ee來表示主動(dòng)和被動(dòng)的關(guān)系,例如:employer就是雇主(老板),employee就是苦逼的被雇傭者(打工人)。ptrace系統(tǒng)函數(shù)是Linux內(nèi)核提供的一個(gè)用于進(jìn)程跟蹤的系統(tǒng)調(diào)用,通過它,一個(gè)進(jìn)程(gdb)可以讀寫另外一個(gè)進(jìn)程(test)的指令空間、數(shù)據(jù)空間、堆棧和寄存器的值。而且gdb進(jìn)程接管了test進(jìn)程的所有信號(hào),也就是說系統(tǒng)向test進(jìn)程發(fā)送的所有信號(hào),都被gdb進(jìn)程接收到,這樣一來,test進(jìn)程的執(zhí)行就被gdb控制了,從而達(dá)到調(diào)試的目的。 也就是說,如果沒有g(shù)db調(diào)試,操作系統(tǒng)與目標(biāo)進(jìn)程之間是直接交互的;如果使用gdb來調(diào)試程序,那么操作系統(tǒng)發(fā)送給目標(biāo)進(jìn)程的信號(hào)就會(huì)被gdb截獲 ,gdb根據(jù)信號(hào)的屬性來決定:在繼續(xù)運(yùn)行目標(biāo)程序時(shí)是否把當(dāng)前截獲的信號(hào)轉(zhuǎn)交給目標(biāo)程序,如此一來,目標(biāo)程序就在gdb發(fā)來的信號(hào)指揮下進(jìn)行相應(yīng)的動(dòng)作。 五、GDB如何調(diào)試已經(jīng)執(zhí)行的服務(wù)進(jìn)程 是否有小伙伴會(huì)提出這樣一個(gè)疑問:上面被調(diào)試的程序test是從頭開始執(zhí)行的,是否可以用gdb來調(diào)試一個(gè)已經(jīng)處于執(zhí)行中的服務(wù)進(jìn)程呢?答曰:可以。這就涉及到ptrace系統(tǒng)函數(shù)的第一個(gè)參數(shù)了,這個(gè)參數(shù)是一個(gè)枚舉類型的值,其中重要的是2個(gè):PTRACE_TRACEME和PTRACE_ATTACH< 。 在上面的講解中,子進(jìn)程 在調(diào)用ptrace系統(tǒng)函數(shù)時(shí)使用的參數(shù)是PTRACE_TRACEME ,注意橙色文字:是子進(jìn)程 調(diào)用ptrace,相當(dāng)于子進(jìn)程對(duì)操作系統(tǒng)說:gdb進(jìn)程是我的爸爸,以后你有任何想發(fā)給我的信號(hào),請(qǐng)直接發(fā)給gdb進(jìn)程吧! 如果想對(duì)一個(gè)已經(jīng)執(zhí)行的進(jìn)程B 進(jìn)行調(diào)試,那么就要在gdb這個(gè)父進(jìn)程 中調(diào)用ptrace(PTRACE_ATTACH ,[其他參數(shù)]),此時(shí),gdb進(jìn)程會(huì)attach(綁定) 到已經(jīng)執(zhí)行的進(jìn)程B ,gdb把進(jìn)程B收養(yǎng)成為自己的子進(jìn)程 ,而子進(jìn)程B的行為等同于它進(jìn)行了一次 PTRACE_TRACEME操作。此時(shí)gdb進(jìn)程會(huì)發(fā)送SIGSTO信號(hào)給子進(jìn)程B,子進(jìn)程B接收到SIGSTOP信號(hào)后,就會(huì)暫停執(zhí)行進(jìn)入TASK_STOPED狀態(tài),表示自己準(zhǔn)備好被調(diào)試了。 所以,不論是調(diào)試一個(gè)新程序,還是調(diào)試一個(gè)已經(jīng)處于執(zhí)行中狀態(tài)的服務(wù)程序,通過ptrace系統(tǒng)調(diào)用,最終的結(jié)果都是:gdb程序是父進(jìn)程,被調(diào)試程序是子進(jìn)程,子進(jìn)程的所有信號(hào)都被父進(jìn)程gdb來接管,并且父進(jìn)程gdb可查看、修改子進(jìn)程的內(nèi)部信息,包括:堆棧、寄存器等 。 關(guān)于綁定,有幾個(gè)限制需要了解一下:不予許自我綁定,不允許多次綁定到同一個(gè)進(jìn)程,不允許綁定1號(hào)進(jìn)程。 六、偷窺GDB如何實(shí)現(xiàn)斷點(diǎn)指令 大道理已經(jīng)講完了,這里我們通過設(shè)置斷點(diǎn)(break) 這個(gè)調(diào)試指令,來偷窺一下 gdb 內(nèi)部的調(diào)試機(jī)制。還是以上面的代碼為例子,這里再重新貼一下代碼: #include int main (int argc, char *argv[]) { int a = 1 ; int b = 2 ; int c = a b; printf ("c = %d \n" , c); return 0 ; } 來看一下編譯出來的反匯編代碼是什么樣的,編譯指令: gcc -S test.c; cat test.S) 這里只貼了一部分反匯編代碼,只要能說明底層的原理就達(dá)到我們的目的了。 上面說到,在執(zhí)行g(shù)db ./test之后,gdb就會(huì)fork出一個(gè)子進(jìn)程,這個(gè)子進(jìn)程首先調(diào)用ptrace然后執(zhí)test程序,這樣就準(zhǔn)備好調(diào)試環(huán)境了。 我們把源碼和匯編代碼放在一起,方便理解: 在調(diào)試窗口輸入設(shè)置斷點(diǎn)指令“break 5”,此時(shí)gdb做2件事情: 對(duì)第5行源碼所對(duì)應(yīng)的第10行匯編代碼存儲(chǔ)到斷點(diǎn)鏈表中 。在匯編代碼的第10行,插入中斷指令I(lǐng)NT3,也就是說:匯編代碼中的第10行被替換為INT3 。然后,在調(diào)試窗口繼續(xù)輸入執(zhí)行指令“run”(一直執(zhí)行,直到遇到斷點(diǎn)就暫停 ),匯編代碼中PC指針(一個(gè)內(nèi)部指針,指向即將執(zhí)行的那行代碼)執(zhí)行第10行時(shí),發(fā)現(xiàn)是INT3指令,于是操作系統(tǒng)就發(fā)送一個(gè)SIGTRAP信號(hào)給test進(jìn)程。 此刻,第10行匯編代碼被執(zhí)行過了,PC指針就指向第11行了。 上面已經(jīng)說過,操作系統(tǒng)發(fā)給test的任何信號(hào),都被gdb接管了,也就是說gdb會(huì)首先接收到這SIGTRAP個(gè)信號(hào),gdb發(fā)現(xiàn)當(dāng)前匯編代碼執(zhí)行的是第10行,于是到斷點(diǎn)鏈表中查找,發(fā)現(xiàn)鏈表中存儲(chǔ)了第10行的代碼,說明第10行被設(shè)置了斷點(diǎn)。于是gdb又做了2個(gè)操作: 把匯編代碼中的第10行"INT3"替換為斷點(diǎn)鏈表中原來的代碼。 ? 2.?
把 PC 指針回退一步,也即是設(shè)置為指向第10 行。 然后,gdb繼續(xù)等待用戶的調(diào)試指令。 此刻,就相當(dāng)于下一條執(zhí)行的指令是匯編代碼中的第10行 ,也就是源碼中的第5行 。從我們調(diào)試者角度看,就是被調(diào)試程序在第5行 斷點(diǎn)處暫停了下來,此時(shí)我們可以繼續(xù)輸入其他調(diào)試指令來debug,比如:查看變量值、查看堆棧信息、修改局部變量的值等等。 七、偷窺GDB如何實(shí)現(xiàn)單步指令next 還是以剛才的源代碼和匯編代碼為例,假設(shè)此時(shí)程序停止在源碼的第6行,即匯編代碼的第11行: 在調(diào)試窗口輸入單步執(zhí)行指令next ,我們的目的是執(zhí)行一行代碼 ,也就是把源碼中第6行代碼執(zhí)行完,然后停止在第7行 。gdb在接收到next執(zhí)行時(shí),會(huì)計(jì)算出第7行 源碼,應(yīng)該對(duì)應(yīng)到匯編代碼的第14行 ,于是gdb就控制匯編代碼中的PC指針一直執(zhí)行,直到第13行 執(zhí)行結(jié)束,也就是PC指向第14行 時(shí),就停止下來,然后繼續(xù)等待用戶輸入調(diào)試指令。 八、總結(jié) 通過break和next這2個(gè)調(diào)試指令,我們已經(jīng)明白了gdb中是如何處理調(diào)試指令。當(dāng)然,gdb中的調(diào)試 指令還有很多,包括更復(fù)雜的獲取堆棧信息、修改變量的值 等等,有興趣的小伙伴可以繼續(xù)深入跟蹤。 - EOF -
欲知詳情,請(qǐng)下載word文檔
下載文檔
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
上海2025年8月7日 /美通社/ -- 在近日落幕的"2025長(zhǎng)三角(昆山)具身智能場(chǎng)景應(yīng)用大賽"中,國(guó)內(nèi)知名品牌節(jié)卡機(jī)器人憑借卓越的技術(shù)與應(yīng)用實(shí)力,奪得機(jī)器人賽道工業(yè)制造場(chǎng)景上下料第一名。該賽事由...
關(guān)鍵字:
大賽
機(jī)器人
相機(jī)
調(diào)試
昆山2023年9月15日 /美通社/ -- 萬豪旅享家旗下31個(gè)非凡品牌之一的萬楓酒店今日宣布,昆山萬楓酒店盛大開業(yè)。昆山市是首批"國(guó)家生態(tài)園林城市",旅游資源豐富,素有"百戲之祖,昆曲之鄉(xiāng)...
關(guān)鍵字:
液晶電視
燈光
調(diào)試
高鐵
覆蓋華東、華北和西部的三大客戶創(chuàng)新與應(yīng)用中心在兩年內(nèi)相繼開業(yè) 以客戶為中心的本地化戰(zhàn)略迎來重要里程碑 成都2023年9月7日 /美通社/ -- 生命科學(xué)集團(tuán)賽多利斯持續(xù)擴(kuò)張?jiān)谌A足跡,并于今日正式啟用西部區(qū)...
關(guān)鍵字:
質(zhì)量檢測(cè)
儀器
生物技術(shù)
調(diào)試
婦科大咖云集 共話日間診療新模式 北京2023年3月7日 /美通社/ -- 為進(jìn)一步推廣由郎景和院士牽頭,朱蘭教授等我國(guó)多位著名婦科醫(yī)學(xué)專家共同編著《日間宮腔鏡手術(shù)中心設(shè)置及管理流程中國(guó)專家共識(shí)》,普及日間宮腔鏡診療理...
關(guān)鍵字:
東風(fēng)
內(nèi)窺鏡
編寫
調(diào)試
在完成應(yīng)用系統(tǒng)的硬件組裝和軟件設(shè)計(jì)以后,便進(jìn)入系統(tǒng)調(diào)試階段。這個(gè)階段的任務(wù)是排除樣機(jī)中的硬件故 障和糾正軟件中的設(shè)計(jì)錯(cuò)誤,并解 決硬件和軟件之間的不協(xié)調(diào)問題 。下面介紹幾種調(diào)試方法。
關(guān)鍵字:
MCS 51 應(yīng)用系統(tǒng)
調(diào)試
加電復(fù)位電路
南京2022年12月16日 /美通社/ -- 近日,南瑞集團(tuán)參建的全國(guó)首臺(tái)(套)單機(jī)650MW水電機(jī)組全國(guó)產(chǎn)調(diào)速器、勵(lì)磁系統(tǒng)在華能糯扎渡水電站#1機(jī)組成功投運(yùn),為我國(guó)水電站核心技術(shù)國(guó)產(chǎn)化替代提供了“示范樣板”。 南瑞集...
關(guān)鍵字:
控制系統(tǒng)
電站
調(diào)速器
調(diào)試
提供以客戶為中心的技術(shù)解決方案和服務(wù),助力華北地區(qū)生命科學(xué)和生物制藥行業(yè)加速醫(yī)學(xué)發(fā)現(xiàn)、簡(jiǎn)化藥物生產(chǎn) 賽多利斯在中國(guó)的本地化戰(zhàn)略迎來重要里程碑 山東煙臺(tái)2022年11月1日 /美通社/ -- 生命科學(xué)集團(tuán)賽...
關(guān)鍵字:
生物技術(shù)
儀器
蛋白質(zhì)
調(diào)試
做硬件需要加班嗎?有的小伙伴說不加班,到點(diǎn)就走,要加班得提申請(qǐng),走流程非常麻煩;有的小伙伴說要加班,加到凌晨是常有的事。
關(guān)鍵字:
硬件
調(diào)試
裝配
研發(fā)產(chǎn)品難嗎?對(duì)于剛剛接觸射頻硬件設(shè)計(jì)的我來說非常難,設(shè)計(jì)和調(diào)試、維修不同,調(diào)試是在老帶新的基礎(chǔ)上,按照?qǐng)D紙甚至圖紙都不要就可以按照SOP流程得到性能高的產(chǎn)品;維修的話,看懂原理圖是必須的,但是你并不需要知道具體的設(shè)計(jì)參...
關(guān)鍵字:
射頻工程師
設(shè)計(jì)
調(diào)試
摘要:針對(duì)某公司供熱改造工程中,新建背壓機(jī)組在調(diào)試及試運(yùn)行過程中暴露出的問題進(jìn)行了梳理分析,并采取了有針對(duì)性的應(yīng)對(duì)策略,最終實(shí)現(xiàn)了該機(jī)組的靈活啟停和穩(wěn)定運(yùn)行,滿足了生產(chǎn)需求。
關(guān)鍵字:
振動(dòng)
動(dòng)平衡
調(diào)試
福建莆田2022年9月1日 /美通社/ -- 8月30日,武大靖攜手央視網(wǎng)共同走進(jìn)三棵樹醉美園區(qū),與央視網(wǎng)主持人常婷、黃鶴,一起開啟“尋綠之旅”,從綠色理念、綠色園區(qū)、綠色產(chǎn)品、綠色生產(chǎn)、綠色服務(wù),看三棵樹用綠色涂料涂刷...
關(guān)鍵字:
智能化
工程師
調(diào)試
研發(fā)中心
摘要:結(jié)合影響電氣設(shè)備安裝和調(diào)試的因素,對(duì)電力系統(tǒng)電氣設(shè)備的安裝與調(diào)試技術(shù)進(jìn)行了分析,以期提高電氣設(shè)備的運(yùn)行效率。
關(guān)鍵字:
電氣設(shè)備
安裝
調(diào)試
摘要:對(duì)地鐵隧道TVF、TEF風(fēng)機(jī)安裝與調(diào)試過程中的細(xì)節(jié)問題進(jìn)行了探討,主要從風(fēng)機(jī)安裝、風(fēng)機(jī)調(diào)試準(zhǔn)備、風(fēng)機(jī)試運(yùn)轉(zhuǎn)、監(jiān)測(cè)運(yùn)轉(zhuǎn)數(shù)據(jù)等方面展開了分析,確保風(fēng)機(jī)能夠一次試機(jī)成功。
關(guān)鍵字:
安裝
調(diào)試
前置條件
助力全球工業(yè)向數(shù)字化與可持續(xù)邁進(jìn)
德國(guó)漢諾威2022年5月31日 /美通社/ -- 5月31日,2022漢諾威工業(yè)博覽會(huì)開幕,美的工...
關(guān)鍵字:
美的
CD
機(jī)器人
調(diào)試
摘要:電氣儀表的安裝與調(diào)試作為機(jī)電工程中的核心技術(shù)環(huán)節(jié),對(duì)保證機(jī)電工程整體質(zhì)量起到關(guān)鍵作用?,F(xiàn)通過分析影響電氣儀表安裝質(zhì)量的主要因素,探討了機(jī)電工程中電氣儀表安裝與調(diào)試的流程及技術(shù)要點(diǎn),并指出了提升電氣儀表調(diào)試質(zhì)量的有效...
關(guān)鍵字:
機(jī)電工程
電氣儀表
調(diào)試
關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:安富萊電子論壇:www.armbbs.cn最近因?yàn)轫?xiàng)目選型需要,開始用了stm32H750vbt6這款MCU,我一直提倡工欲善其事,必先利其器,尤其是在嵌入式開發(fā)中,所以看到armfl...
關(guān)鍵字:
調(diào)試
關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:技術(shù)讓夢(mèng)想更偉大整理:李肖遙一、JTAG協(xié)議JTAG(JointTestActionGroup,聯(lián)合測(cè)試行動(dòng)小組)是一種國(guó)際標(biāo)準(zhǔn)測(cè)試協(xié)議(IEEE1149.1兼容),主要用于芯片內(nèi)部測(cè)...
關(guān)鍵字:
ST
調(diào)試
接口
最近在調(diào)試AndroidNative層的內(nèi)存泄漏問題,整理了一些筆記,分享一下如何查看內(nèi)存信息?在代碼中打印,開啟一個(gè)線程,間隔固定時(shí)間打印出當(dāng)前內(nèi)存信息【有好多種獲取內(nèi)存信息的API,這里只列出其中一種方式,親測(cè)有效】...
關(guān)鍵字:
Android
內(nèi)存
調(diào)試
關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:安富萊電子論壇:www.armbbs.cn最近因?yàn)轫?xiàng)目選型需要,開始用了stm32H750vbt6這款MCU,我一直提倡工欲善其事,必先利其器,尤其是在嵌入式開發(fā)中,所以看到armfl...
關(guān)鍵字:
調(diào)試