0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在CubeIDE環(huán)境下怎么去調(diào)試代碼呢?

冬至子 ? 來源:聊點嵌入式 ? 作者:聊點嵌入式 ? 2023-11-06 15:14 ? 次閱讀

搞軟件開發(fā),如果誰能拍胸脯說自己開發(fā)的代碼不存在bug,一定會被現(xiàn)實打臉的。系統(tǒng)復(fù)雜了,代碼多了,一定會出問題。就算代碼架構(gòu)設(shè)計得多么先進,程序員編程水平多么高,團隊協(xié)作多么緊密,代碼審核多么嚴(yán)謹(jǐn),運行出問題的幾率一定存在,是不過是概率大小,出問題早晚,問題的嚴(yán)重與否而已。

既然代碼會出問題,那肯定要解決,最有效的辦法就是調(diào)試(Debug)了。不管是嵌入式開發(fā),還是應(yīng)用開發(fā),調(diào)試都是程序員必備技能,只不過嵌入式開發(fā)的調(diào)試又有所不同,除了需要OCD、GDB之類的調(diào)試軟件之外,還需要J-Link、ST-Link等調(diào)試器,以及片上JTAG模塊的支持。

我在讀大學(xué)的時候?qū)W的是51單片機,當(dāng)時也只有實驗室有實驗箱。所謂的調(diào)試基本就是根據(jù)運行現(xiàn)象去分析,比如某種亮燈狀態(tài)表示某種情況,或者是串口打印信息,屏幕顯示信息等,以此來Debug。

后來跟課題組做項目,陸續(xù)用到AVRPIC單片機,當(dāng)時基本沒有第三方的開發(fā)板,只能找官方資源,官方的下載器。官方的調(diào)試器極其昂貴,想調(diào)試的話也只能跟調(diào)試51一樣,基本都能解決問題,就是要麻煩一點。

現(xiàn)在的ARM調(diào)試器都是白菜價,各個IDE也都具備基本的調(diào)試功能,Debug更方便了。Keil下的調(diào)試比較直觀,在工程選項里配置好調(diào)試參數(shù)后,點個按鈕就進入調(diào)試模式,這里就不多介紹。今天來講一下CubeIDE下怎么去調(diào)試代碼。

1. CubeIDE的編譯選項

Keil不同,基于EclipseCubeIDE下的工程默認(rèn)有DebugRelease兩個編譯配置,如下圖所示??梢栽诠こ虒傩韵略O(shè)置不同的編譯參數(shù),分別作為調(diào)試和發(fā)行時使用,當(dāng)然也可以根據(jù)需要增加新的編譯配置。Keil下也可以實現(xiàn)類似的功能,不過需要我們自己去配置,這個有很多文檔可以參考。

圖片

保留不同編譯配置的功能在寫代碼時非常有用,結(jié)合條件編譯,可以提高調(diào)試效率,或者是適應(yīng)不同的硬件平臺,不需要再搞一個新的工程。例如在Debug編譯配置下,默認(rèn)會定義一個DEBUG的符號,在Release編譯配置下,則沒有定義這個符號。見下圖。

圖片

我們在編寫代碼的時候,就可以根據(jù)編譯配置的不同,結(jié)合條件編譯,選擇編譯不同的代碼。例如,在正常工作的時候,某個傳感器上電后需要經(jīng)過10分鐘才能正常工作,而在調(diào)試的時候,完全沒必要去等這10分鐘。我們可以用下面的偽代碼實現(xiàn)這個功能。

#ifndef DEBUG
 delay_second(10*60);    //延時10分鐘
 #endif
  1. 調(diào)試配置

使用Debug編譯選項編譯完成后,會在工程目錄->Debug下生成elf可執(zhí)行文件,elf文件包含調(diào)試信息,這是我們調(diào)試的必要文件。Eclipse調(diào)試前需要配置調(diào)試參數(shù),配置方式見下圖。

圖片

需要進行調(diào)試的話,點擊工具欄小蟲子圖標(biāo)就進入調(diào)試模式。

在調(diào)試模式下可以設(shè)置斷點,或單步運行,也可以查看寄存器的值,變量值等。另外CubeIDE還提供了很多有用的功能,比如說可以調(diào)出“故障分析器”,代碼出現(xiàn)異常時可以自動分析錯誤類型,不需要我們費力的去查看相關(guān)寄存器的值來確定錯誤類型;還可以顯示反匯編后的匯編代碼,與C代碼同步顯示。需要注意的是,調(diào)試模式下,編譯代碼應(yīng)選擇不優(yōu)化,這樣設(shè)置的斷點才都會有效。

調(diào)試時所需要查看的信息都可以在下圖的菜單里調(diào)出來。

圖片

3. 小結(jié)

進入調(diào)試模式后,就可以根據(jù)實際情況設(shè)置斷點,查看寄存器或變量值,也可以根據(jù)需要單步運行。大家可以在實踐中熟悉調(diào)試方法與技巧。

另外,在調(diào)試模式下,無論是打斷點還是單步運行,都沒有辦法實時跟蹤寄存器或變量值,看到的只是斷點處的值,如果想看到實時變化的寄存器或變量值,甚至是某個函數(shù)被調(diào)用的次數(shù),或者運行占用的CPU時間等,可以通過ARM提供的SWV(Serial Wire Viewer)實時跟蹤技術(shù)來實現(xiàn),下次我們再來講講這個SWV。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51189

    瀏覽量

    754355
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5357

    瀏覽量

    120576
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10905

    瀏覽量

    356449
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    305

    瀏覽量

    23763
  • ARM單片機
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    9858
收藏 人收藏

    評論

    相關(guān)推薦

    STM32CubeIDE入門教程 STM32CubeIDE安裝使用教程

    STM32CubeIDE是一個高級C / C ++開發(fā)平臺,具有用于STM32微控制器和微處理器的外設(shè)配置,代碼生成,代碼編譯和調(diào)試功能。它基于Eclipse??/ CDT框架和GCC
    的頭像 發(fā)表于 06-08 09:19 ?9268次閱讀
    STM32<b class='flag-5'>CubeIDE</b>入門教程 STM32<b class='flag-5'>CubeIDE</b>安裝使用教程

    請問STM32CubeIDE能否生成MDK代碼?

    雖然我知道CubeIDE是集成開發(fā)環(huán)境代碼生成、編輯、編譯下載調(diào)試都OK,但是想問一,能否像STM32CubeMX那樣,生成
    發(fā)表于 03-13 08:02

    Ubuntu環(huán)境如何使用stlink調(diào)試stm32f4-discovery程序

    Ubuntu環(huán)境如何使用stlink調(diào)試stm32f4-discovery程序?Ubun
    發(fā)表于 11-02 07:20

    如何編寫STM32CubeMX生成的Keil工程代碼

    如何編寫STM32CubeMX生成的Keil工程代碼?如何實現(xiàn)STM32CubeIDE創(chuàng)建的工程
    發(fā)表于 12-02 07:59

    STM32CUBEIDE環(huán)境printf()和scanf()為什么會運行失敗

    STM32CUBEIDE環(huán)境printf()和scanf()為什么會運行失敗?其解決方案是什么?
    發(fā)表于 12-02 07:01

    如何對STM32CUBEIDE的ADC DMA進行配置

    STM32的ADC DMA該怎樣使用?如何對STM32CUBEIDE的ADC DMA進行配置?
    發(fā)表于 01-25 06:16

    怎樣使用STM32CubeIDE軟件

    如何對STM32CubeIDE進行配置?怎樣使用STM32CubeIDE軟件?
    發(fā)表于 02-28 08:48

    怎樣控制基于STM32CubeIDE的智能小車

    基于STM32CubeIDE的智能小車包括哪些功能?怎樣控制基于STM32CubeIDE的智能小車?
    發(fā)表于 03-01 07:39

    請問一怎樣使用cubeide生成一些代碼?

    請問一怎樣使用cubeide生成一些代碼?
    發(fā)表于 12-08 09:07

    使用STM32CubeIDE生成代碼調(diào)試出錯我該如何解決?

    我正在使用 STM32CubeIDE 生成代碼,但是當(dāng)我開始調(diào)試時,出現(xiàn)如下錯誤:《STMicroelectronics ST-LINK GDB 服務(wù)器。版本 5.2.3版權(quán)所有 (c) 2019
    發(fā)表于 12-19 08:52

    STM32CubeIDE上構(gòu)建TouchGFX生成的代碼,報調(diào)試器錯誤怎么處理?

    STM32F746NGHx_FLASH.ld(來自特定板的 Repository Demo),將文件大小減小到 35KB。但是代碼沒有目標(biāo)上工作,調(diào)試模式提到的 2) 或 STM
    發(fā)表于 02-07 07:11

    STM32CubeIDE所支持的幾個調(diào)試小工具及功能

    意法半導(dǎo)體ST公司為廣大STM32用戶免費提供了基于GCC的功能強大集成調(diào)試工具STM32CubeIDE。這里簡單演示STM32CubeIDE所支持的幾個
    的頭像 發(fā)表于 07-11 09:59 ?3317次閱讀

    集成開發(fā)環(huán)境STM32CubeIDE查看匯編代碼的相關(guān)配置操作

    有人使用ST免費提供的集成開發(fā)環(huán)境STM32CubeIDE,想知道如何查看匯編代碼,這里簡單介紹下相關(guān)配置操作。
    發(fā)表于 09-01 09:55 ?3607次閱讀

    基于STM32CubeIDE調(diào)試配置

    當(dāng)我把這個地方取消勾選后,使用前面相同代碼做驗證調(diào)試,此時不再觸發(fā)異常并返回0值結(jié)果。到此,也就解釋了發(fā)生除以0操作時,為什么STM32CubeIDE會出現(xiàn)與MDK、IAR不同的調(diào)試結(jié)
    的頭像 發(fā)表于 10-08 10:01 ?4040次閱讀

    STM32Cube CubeIDE添加代碼點亮LED

    前一篇已經(jīng)生成了CubeIDE的工程代碼,接下來就要用CubeIDE打開,添加點亮LED燈的代碼了。
    的頭像 發(fā)表于 11-06 14:40 ?1474次閱讀
    STM32Cube <b class='flag-5'>CubeIDE</b>添加<b class='flag-5'>代碼</b>點亮LED