女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

講解一下容易導致軟件問題的5種情況以及應對措施

工程師鄧生 ? 來源:玩轉單片機與嵌入式 ? 作者:風雨無阻 ? 2022-09-05 17:05 ? 次閱讀

在進行產品開發或者軟件設計時,有沒有遇到過下面的這種情況:

程序本來運行的好好的,莫名其妙的就出現了bug,但是還找不到出現bug的規律?

已經驗證好的產品,到客戶那里突然出現了問題?

出現的bug總是莫名其妙,找不到規律,感覺像“幽靈”一般的存在?

增加了一行無關的代碼,程序就不能運行了?

其實,有的時候,問題原因會以一種微妙的方式影響代碼的存在,今天我們重點講解一下難以發現的、容易導致軟件問的5種情況,以及所對應的應對措施。

01

堆棧溢出

肯定很多程序員都非常了解“堆棧溢出”這種情況。堆棧溢出可能會對數據或者指令造成破壞,從而影響程序的正確運行。 并且,發生堆棧溢出這種錯誤,在嵌入式設備程序中造成的影響比計算機中更大。通常有以下幾種原因:

1、嵌入式系統通常使用較少的RAM

2、通常沒有可依賴的虛擬內存(因為沒有磁盤)

3、基于RTOS任務的固件設計使用多個堆棧(每個任務一個),每個堆棧的大小必須足夠大,以確保不受唯一最壞情況堆棧深度的影響

4、中斷處理程序可能會嘗試使用這些堆棧 在進行相關測試的時候,有的時候堆棧溢出這種錯誤我們并不能測試出來,這就造成了:經過測試驗證的程序,到客戶處突然運行異常了。

為了避免發生堆棧溢出這種錯誤,我們可以通過自上而下的代碼控制流分析方法,來證明代碼是否會出現堆棧溢出錯誤。

避免措施:

1、確定好自己程序定義的堆棧的全部空間地址;

2、在臨近堆棧的位置,定義固定地址的數組或者數據;

3、在程序中實時檢查數組或者數據的值,若發現數據改變,證明發生了堆棧溢出,增加特殊的處理姿勢:如讓設備進入到特定的安全模式,或者輸出當前的PC地址等。

02

競爭條件

在程序運行過程中,大量的、無序的任務一直在運行,但是資源是有限的,兩個不同的任務之間可能就存在競爭資源的情況,由于兩個或者多個進程競爭使用不能被同時訪問的資源,使得這些進程有可能因為時間上推進的先后原因而出現問題,這叫做競爭條件。

條件競爭就是兩個或者多個進程或者線程同時處理一個資源(如全局變量、文件等)產生非預想的執行效果,從而產生程序執行流的改變,從而達到攻擊的目的。

防止條件競爭的方法如下:

1、采用某種保護機制來保護數據(如互斥體),確保只有進行修改的線程才能看到不變量被破壞時的中間狀態;

2、使用無鎖編程

3、使用事務來處理更新,將數據和讀取都存儲到事務日志中,然后將之前的操作合并為一步,再進行提交。當數據被另一個線程修改后,或處理已經重啟的情況下,提交就會無法進行。

03

不可重入函數

首先需要區分什么是可重入什么是不可重入函數?

可重入函數:可重入函數可以由多個任務并發使用,而不必擔心數據錯誤

不可重入函數:不能由超過一個任務所共享,除非能確保函數的互斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)

一些常見的不可重入函數的情形:

函數中使用了靜態變量,無論是全局變量還是局部靜態變量

函數返回靜態變量

函數中調用了不可重入函數

函數體內使用了靜態的數據結構

函數體內調用了malloc()或者free()函數

函數體內調用了其他標準I/O函數

函數是singleton中的成員函數而且使用了不使用線程獨立存儲的成員變量

總得來說,如果一個函數在重入條件下使用了未受保護的共享資源,那么他就是不可重入的。

例如兩個函數func1和func2都是不可重入函數:對多線程條件下,操作系統會在func1還沒有執行完的情況下,切換到另一個線程中,那個線程可能再次調用func1,這樣狀態就錯了。

避免措施:

在每個庫或驅動程序模塊中創建并隱藏一個本質上不可重入的互斥鎖。將此互斥鎖的獲取作為操作整個模塊中使用的任何持久數據或共享寄存器的先決條件。

04

優先級翻轉

優先級翻轉是當一個高優先級任務通過信號量機制訪問共享資源時,該信號量已被一低優先級任務占有,因此造成高優先級任務被許多具有較低優先級任務阻塞,實時性難以得到保證。

比較經典的由于優先級翻轉造成的事故就是當年的火星探路者號,就由于,此處所說的,優先級反轉,而導致了內部執行邏輯出錯的bug。

在1997年7月4號發射后,在開始搜集氣象數據之后沒幾天,系統(無故)重啟了。后來,當然,被相關技術人員找到問題根源,就是,這個優先級反轉所導致的,然后修復了此bug。

解決措施:

1、優先級天花板

優先級天花板是當線程申請某資源時,把該線程的優先級提升到可訪問這個資源的所有線程中的最高優先級,這個優先級稱為該資源的優先級天花板。這種方法簡單易行,不必進行復雜的判斷,不管線程是否阻塞了高優先級線程的運行, 只要線程訪問共享資源都會提升線程的優先級。

2、優先級繼承

優先級繼承是當線程A申請共享資源Source時,如果共享資源Source正在被線程C使用,通過比較線程C與自身的優先級,如發現線程C的優先級小于自身的優先級, 則將線程C的優先級提升到自身的優先級,線程C釋放資源Source后,再恢復線程C的原優先級。這種方法只在占有資源的低優先級線程阻塞了高優先級線程時才動態的改變線程的優先級。

05

內存泄漏

內存泄漏(Memory Leak)是指程序中已動態分配的堆內存由于某種原因程序未釋放或無法釋放,造成系統內存的浪費,導致程序運行速度減慢甚至系統崩潰等嚴重后果。

解決措施: 當申請了動態區域,用完的時候一定要記得釋放(free),如果沒有釋放,那么這塊內存區域就將處于不可用狀態(就像占著茅坑不拉屎一樣),程序大了或運行久了就極有可能會導致內存的泄露(重啟一下就能解決90%的問題根源),同時我們在釋放的時候也要注意釋放的內存只能釋放一次,不要重復的釋放,有的時候代碼量會比較大,所以有可能會在不止一處地方進行了代碼的釋放操作。因為我們內存釋放了一次后,該內存區域就有可能用來做別的事了,如果這時候我們又再釋放一遍就很有可能會出現問題了。釋放完之后最好把指針指向空地址,避免下次再使用指針的時候出現地址的錯誤。



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1391

    瀏覽量

    116705
  • 中斷處理
    +關注

    關注

    0

    文章

    94

    瀏覽量

    11190
  • RTOS
    +關注

    關注

    24

    文章

    838

    瀏覽量

    120711
  • 堆棧溢出
    +關注

    關注

    0

    文章

    9

    瀏覽量

    8003

原文標題:不要以為莫名其妙的bug是玄學!介紹5個引起程序隱藏bug的原因以及預防措施。

文章出處:【微信號:精通單片機與嵌入式,微信公眾號:精通單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    rtthread_studio使用lwip軟件包變異報錯是什么原因導致的?

    最近學習使用rtthread_studio 開發stm32f407網絡通信,打開lwip軟件包,結果變異報錯,網上查了一下,沒人遇到過這個情況,好像簡單設置一下就能編譯通過,怎么我這就
    發表于 03-05 09:09

    請問一下DLPC3439的控制器,軟件編寫工具是什么?以及下載地址是什么?

    請問一下DLPC3439的控制器,軟件編寫工具是什么?以及下載地址是什么? 非常感謝
    發表于 02-24 07:10

    “碰一下”支付背后的4G技術

    不知道你是否有留意,近期,在線下支付場景中,多了個支付寶“碰一下”支付的設備,只需要“解鎖手機—碰一下—確認”即可完成支付,對比打開付款碼支付,步驟確實更加簡潔。
    的頭像 發表于 01-03 16:27 ?1180次閱讀

    支付寶發布新代AI視覺搜索“探一下

    輕松實現對感興趣事物的快速識別與搜索。只需打開支付寶,利用攝像頭對準目標,無論是花草寵物、潮玩收藏,還是旅游景點的隨身講解,甚至是商品藥品的詳細信息,都能迅速獲取。此外,“探一下”還具備趣味解讀功能,能夠為用戶解讀萌
    的頭像 發表于 12-31 10:49 ?466次閱讀

    智多晶EDA工具HqFpga軟件實用小功能

    智多晶EDA工具HqFpga軟件實用小功能增加啦,支持生成可調用網表的功能和ballmap功能。下面來給大家講解一下如何通過HqFpga軟件生成可調用的網表文件
    的頭像 發表于 12-05 10:23 ?846次閱讀
    智多晶EDA工具HqFpga<b class='flag-5'>軟件</b>實用小功能

    什么情況下無功補償電容器會出現損壞

    在低壓配電系統的無功補償中,無功補償電容器已經被廣泛應用,但是出現故障甚至損壞的情況也相對較多。在今天的文章中,為大家總結了可能會造成無功補償電容器損壞的幾種情況應對方法,快來了解一下
    的頭像 發表于 11-05 14:14 ?602次閱讀
    什么<b class='flag-5'>情況下</b>無功補償電容器會出現損壞

    OPA2132容易自激是什么原因導致的?

    萬用表測量第5定會自激,就算放開表筆依然自激,如果再用表筆碰一下第7腳自激就沒了,碰第5腳又自激。就是這種
    發表于 11-01 06:57

    電子元件在哪些情況下容易遭受靜電破壞

    在當今的電子技術時代,電子元件和產品的可靠性至關重要。然而,靜電放電(ESD)對電子產品構成了嚴重威脅,從生產到使用的全過程,電子產品都處于靜電破壞的風險之中。本文將深入探討電子元件在哪些情況下容易
    的頭像 發表于 10-04 16:39 ?1810次閱讀

    什么情況下OPA541容易損壞?

    我打算用OPA541做個交流程控電壓源,輸出功率50W。OPA541采用開關電源供電±24V,OPA541采用數據手冊上的接法,限流保護電阻為0.5歐。在5歐負載的情況下,輸出電壓有效值15V
    發表于 09-11 07:49

    內存條接觸不良會導致哪些情況

    內存條接觸不良是一種常見的計算機故障,它可能會導致多種問題,影響計算機的正常運行。本文將詳細介紹內存條接觸不良可能導致的各種情況以及如何診
    的頭像 發表于 09-02 14:36 ?3973次閱讀

    請問一下INA333這個芯片很容易壞嗎?

    大家好,請問一下INA333這個芯片很容易壞嗎, 我的單電源3.3V供電。輸入是正向1.0v,反向0.5v,ref接地,放大2倍,結果輸出0.3V左右,是不是芯片壞了
    發表于 08-30 07:16

    環境因素對晶振失效的影響及建議措施

    、高溫環境的影響 在高溫環境,晶振內部的晶體會變得不穩定,從而導致振蕩頻率失真。例如,在些高溫的工業生產環境中,晶振可能會因為無法承受過高的溫度而出現頻率偏差,影響設備的精準
    發表于 08-19 17:36

    plc什么情況下導致程序丟失

    PLC(Programmable Logic Controller,可編程邏輯控制器)是一種廣泛應用于工業自動化領域的設備。它通過執行用戶編寫的程序來實現對機械設備的控制。然而,在某些情況下,PLC
    的頭像 發表于 08-19 09:14 ?2592次閱讀

    極限失控的大模型使電力系統面臨的跨域攻擊風險及應對措施

    分析大規模生成式預訓練模型(以下簡稱為大模型)發生極限失控、使電力系統面臨的跨域攻擊風險及相關的應對措施,以期引起業內對這風險的重視、討論與行動。基于大模型的現狀、發展趨勢以及它與人
    發表于 07-22 12:09 ?0次下載

    MOS管什么情況下會短路

    MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor,金屬-氧化物半導體場效應晶體管)在多種情況下可能會發生短路,這些情況主要涉及其工作環境、操作條件、物理特性以及制造工藝
    的頭像 發表于 07-16 11:39 ?5346次閱讀