在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

講解一下容易導(dǎo)致軟件問題的5種情況以及應(yīng)對(duì)措施

工程師鄧生 ? 來源:玩轉(zhuǎn)單片機(jī)與嵌入式 ? 作者:風(fēng)雨無阻 ? 2022-09-05 17:05 ? 次閱讀

在進(jìn)行產(chǎn)品開發(fā)或者軟件設(shè)計(jì)時(shí),有沒有遇到過下面的這種情況:

程序本來運(yùn)行的好好的,莫名其妙的就出現(xiàn)了bug,但是還找不到出現(xiàn)bug的規(guī)律?

已經(jīng)驗(yàn)證好的產(chǎn)品,到客戶那里突然出現(xiàn)了問題?

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

增加了一行無關(guān)的代碼,程序就不能運(yùn)行了?

其實(shí),有的時(shí)候,問題原因會(huì)以一種微妙的方式影響代碼的存在,今天我們重點(diǎn)講解一下難以發(fā)現(xiàn)的、容易導(dǎo)致軟件問的5種情況,以及所對(duì)應(yīng)的應(yīng)對(duì)措施。

01

堆棧溢出

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

1、嵌入式系統(tǒng)通常使用較少的RAM

2、通常沒有可依賴的虛擬內(nèi)存(因?yàn)闆]有磁盤)

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

4、中斷處理程序可能會(huì)嘗試使用這些堆棧 在進(jìn)行相關(guān)測(cè)試的時(shí)候,有的時(shí)候堆棧溢出這種錯(cuò)誤我們并不能測(cè)試出來,這就造成了:經(jīng)過測(cè)試驗(yàn)證的程序,到客戶處突然運(yùn)行異常了。

為了避免發(fā)生堆棧溢出這種錯(cuò)誤,我們可以通過自上而下的代碼控制流分析方法,來證明代碼是否會(huì)出現(xiàn)堆棧溢出錯(cuò)誤。

避免措施:

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

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

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

02

競(jìng)爭(zhēng)條件

在程序運(yùn)行過程中,大量的、無序的任務(wù)一直在運(yùn)行,但是資源是有限的,兩個(gè)不同的任務(wù)之間可能就存在競(jìng)爭(zhēng)資源的情況,由于兩個(gè)或者多個(gè)進(jìn)程競(jìng)爭(zhēng)使用不能被同時(shí)訪問的資源,使得這些進(jìn)程有可能因?yàn)闀r(shí)間上推進(jìn)的先后原因而出現(xiàn)問題,這叫做競(jìng)爭(zhēng)條件。

條件競(jìng)爭(zhēng)就是兩個(gè)或者多個(gè)進(jìn)程或者線程同時(shí)處理一個(gè)資源(如全局變量、文件等)產(chǎn)生非預(yù)想的執(zhí)行效果,從而產(chǎn)生程序執(zhí)行流的改變,從而達(dá)到攻擊的目的。

防止條件競(jìng)爭(zhēng)的方法如下:

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

2、使用無鎖編程

3、使用事務(wù)來處理更新,將數(shù)據(jù)和讀取都存儲(chǔ)到事務(wù)日志中,然后將之前的操作合并為一步,再進(jìn)行提交。當(dāng)數(shù)據(jù)被另一個(gè)線程修改后,或處理已經(jīng)重啟的情況下,提交就會(huì)無法進(jìn)行。

03

不可重入函數(shù)

首先需要區(qū)分什么是可重入什么是不可重入函數(shù)?

可重入函數(shù):可重入函數(shù)可以由多個(gè)任務(wù)并發(fā)使用,而不必?fù)?dān)心數(shù)據(jù)錯(cuò)誤

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

一些常見的不可重入函數(shù)的情形:

函數(shù)中使用了靜態(tài)變量,無論是全局變量還是局部靜態(tài)變量

函數(shù)返回靜態(tài)變量

函數(shù)中調(diào)用了不可重入函數(shù)

函數(shù)體內(nèi)使用了靜態(tài)的數(shù)據(jù)結(jié)構(gòu)

函數(shù)體內(nèi)調(diào)用了malloc()或者free()函數(shù)

函數(shù)體內(nèi)調(diào)用了其他標(biāo)準(zhǔn)I/O函數(shù)

函數(shù)是singleton中的成員函數(shù)而且使用了不使用線程獨(dú)立存儲(chǔ)的成員變量

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

例如兩個(gè)函數(shù)func1和func2都是不可重入函數(shù):對(duì)多線程條件下,操作系統(tǒng)會(huì)在func1還沒有執(zhí)行完的情況下,切換到另一個(gè)線程中,那個(gè)線程可能再次調(diào)用func1,這樣狀態(tài)就錯(cuò)了。

避免措施:

在每個(gè)庫或驅(qū)動(dòng)程序模塊中創(chuàng)建并隱藏一個(gè)本質(zhì)上不可重入的互斥鎖。將此互斥鎖的獲取作為操作整個(gè)模塊中使用的任何持久數(shù)據(jù)或共享寄存器的先決條件。

04

優(yōu)先級(jí)翻轉(zhuǎn)

優(yōu)先級(jí)翻轉(zhuǎn)是當(dāng)一個(gè)高優(yōu)先級(jí)任務(wù)通過信號(hào)量機(jī)制訪問共享資源時(shí),該信號(hào)量已被一低優(yōu)先級(jí)任務(wù)占有,因此造成高優(yōu)先級(jí)任務(wù)被許多具有較低優(yōu)先級(jí)任務(wù)阻塞,實(shí)時(shí)性難以得到保證。

比較經(jīng)典的由于優(yōu)先級(jí)翻轉(zhuǎn)造成的事故就是當(dāng)年的火星探路者號(hào),就由于,此處所說的,優(yōu)先級(jí)反轉(zhuǎn),而導(dǎo)致了內(nèi)部執(zhí)行邏輯出錯(cuò)的bug。

在1997年7月4號(hào)發(fā)射后,在開始搜集氣象數(shù)據(jù)之后沒幾天,系統(tǒng)(無故)重啟了。后來,當(dāng)然,被相關(guān)技術(shù)人員找到問題根源,就是,這個(gè)優(yōu)先級(jí)反轉(zhuǎn)所導(dǎo)致的,然后修復(fù)了此bug。

解決措施:

1、優(yōu)先級(jí)天花板

優(yōu)先級(jí)天花板是當(dāng)線程申請(qǐng)某資源時(shí),把該線程的優(yōu)先級(jí)提升到可訪問這個(gè)資源的所有線程中的最高優(yōu)先級(jí),這個(gè)優(yōu)先級(jí)稱為該資源的優(yōu)先級(jí)天花板。這種方法簡(jiǎn)單易行,不必進(jìn)行復(fù)雜的判斷,不管線程是否阻塞了高優(yōu)先級(jí)線程的運(yùn)行, 只要線程訪問共享資源都會(huì)提升線程的優(yōu)先級(jí)。

2、優(yōu)先級(jí)繼承

優(yōu)先級(jí)繼承是當(dāng)線程A申請(qǐng)共享資源Source時(shí),如果共享資源Source正在被線程C使用,通過比較線程C與自身的優(yōu)先級(jí),如發(fā)現(xiàn)線程C的優(yōu)先級(jí)小于自身的優(yōu)先級(jí), 則將線程C的優(yōu)先級(jí)提升到自身的優(yōu)先級(jí),線程C釋放資源Source后,再恢復(fù)線程C的原優(yōu)先級(jí)。這種方法只在占有資源的低優(yōu)先級(jí)線程阻塞了高優(yōu)先級(jí)線程時(shí)才動(dòng)態(tài)的改變線程的優(yōu)先級(jí)。

05

內(nèi)存泄漏

內(nèi)存泄漏(Memory Leak)是指程序中已動(dòng)態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費(fèi),導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。

解決措施: 當(dāng)申請(qǐng)了動(dòng)態(tài)區(qū)域,用完的時(shí)候一定要記得釋放(free),如果沒有釋放,那么這塊內(nèi)存區(qū)域就將處于不可用狀態(tài)(就像占著茅坑不拉屎一樣),程序大了或運(yùn)行久了就極有可能會(huì)導(dǎo)致內(nèi)存的泄露(重啟一下就能解決90%的問題根源),同時(shí)我們?cè)卺尫诺臅r(shí)候也要注意釋放的內(nèi)存只能釋放一次,不要重復(fù)的釋放,有的時(shí)候代碼量會(huì)比較大,所以有可能會(huì)在不止一處地方進(jìn)行了代碼的釋放操作。因?yàn)槲覀儍?nèi)存釋放了一次后,該內(nèi)存區(qū)域就有可能用來做別的事了,如果這時(shí)候我們又再釋放一遍就很有可能會(huì)出現(xiàn)問題了。釋放完之后最好把指針指向空地址,避免下次再使用指針的時(shí)候出現(xiàn)地址的錯(cuò)誤。



審核編輯:劉清

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

    關(guān)注

    8

    文章

    1369

    瀏覽量

    115103
  • 中斷處理
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    11024
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    821

    瀏覽量

    119944
  • 堆棧溢出
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    7934

原文標(biāo)題:不要以為莫名其妙的bug是玄學(xué)!介紹5個(gè)引起程序隱藏bug的原因以及預(yù)防措施。

文章出處:【微信號(hào):精通單片機(jī)與嵌入式,微信公眾號(hào):精通單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    “碰一下”支付背后的4G技術(shù)

    不知道你是否有留意,近期,在線下支付場(chǎng)景中,多了個(gè)支付寶“碰一下”支付的設(shè)備,只需要“解鎖手機(jī)—碰一下—確認(rèn)”即可完成支付,對(duì)比打開付款碼支付,步驟確實(shí)更加簡(jiǎn)潔。
    的頭像 發(fā)表于 01-03 16:27 ?567次閱讀

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

    輕松實(shí)現(xiàn)對(duì)感興趣事物的快速識(shí)別與搜索。只需打開支付寶,利用攝像頭對(duì)準(zhǔn)目標(biāo),無論是花草寵物、潮玩收藏,還是旅游景點(diǎn)的隨身講解,甚至是商品藥品的詳細(xì)信息,都能迅速獲取。此外,“探一下”還具備趣味解讀功能,能夠?yàn)橛脩艚庾x萌
    的頭像 發(fā)表于 12-31 10:49 ?205次閱讀

    智多晶EDA工具HqFpga軟件實(shí)用小功能

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

    OPA2132容易自激是什么原因導(dǎo)致的?

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

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

    在當(dāng)今的電子技術(shù)時(shí)代,電子元件和產(chǎn)品的可靠性至關(guān)重要。然而,靜電放電(ESD)對(duì)電子產(chǎn)品構(gòu)成了嚴(yán)重威脅,從生產(chǎn)到使用的全過程,電子產(chǎn)品都處于靜電破壞的風(fēng)險(xiǎn)之中。本文將深入探討電子元件在哪些情況下容易
    的頭像 發(fā)表于 10-04 16:39 ?1266次閱讀

    什么情況下OPA541容易損壞?

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

    請(qǐng)問一下INA333這個(gè)芯片很容易壞嗎?

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

    plc什么情況下會(huì)導(dǎo)致程序丟失

    PLC(Programmable Logic Controller,可編程邏輯控制器)是一種廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域的設(shè)備。它通過執(zhí)行用戶編寫的程序來實(shí)現(xiàn)對(duì)機(jī)械設(shè)備的控制。然而,在某些情況下,PLC
    的頭像 發(fā)表于 08-19 09:14 ?1760次閱讀

    極限失控的大模型使電力系統(tǒng)面臨的跨域攻擊風(fēng)險(xiǎn)及應(yīng)對(duì)措施

    分析大規(guī)模生成式預(yù)訓(xùn)練模型(以下簡(jiǎn)稱為大模型)發(fā)生極限失控、使電力系統(tǒng)面臨的跨域攻擊風(fēng)險(xiǎn)及相關(guān)的應(yīng)對(duì)措施,以期引起業(yè)內(nèi)對(duì)這風(fēng)險(xiǎn)的重視、討論與行動(dòng)。基于大模型的現(xiàn)狀、發(fā)展趨勢(shì)以及它與人
    發(fā)表于 07-22 12:09 ?0次下載

    MOS管什么情況下會(huì)短路

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

    淺析FreeRTOS任務(wù)調(diào)度器的三調(diào)度算法和應(yīng)用

    FreeRTOS在MCU領(lǐng)域應(yīng)用非常廣泛,今天就給大家講解一下FreeRTOS調(diào)度器中的三調(diào)度算法,以及在瑞薩RZ/T2L MPU中的應(yīng)用。
    的頭像 發(fā)表于 05-10 14:02 ?7907次閱讀
    淺析FreeRTOS任務(wù)調(diào)度器的三<b class='flag-5'>種</b>調(diào)度算法和應(yīng)用

    總結(jié)一下LM317的幾種經(jīng)典應(yīng)用電路

    說起LM317,我們做硬件的都很熟悉了,它是LDO的一種,并且輸出電壓很容易通過外部電阻進(jìn)行調(diào)整,今天總結(jié)一下LM317的幾種經(jīng)典應(yīng)用電路。
    的頭像 發(fā)表于 05-01 10:07 ?6476次閱讀
    總結(jié)<b class='flag-5'>一下</b>LM317的幾種經(jīng)典應(yīng)用電路

    深圳恒興隆機(jī)電|雕刻機(jī)電主軸導(dǎo)致容易損壞的原因.

    興隆機(jī)電小編起來看看吧! 、雕刻機(jī)電主軸的質(zhì)量問題在雕刻機(jī)電主軸越使用來越普遍的情況下,電主軸質(zhì)量卻參差不齊。買到質(zhì)量特別差的主軸在高強(qiáng)度的工作環(huán)境
    發(fā)表于 04-01 11:03

    EMI(電磁干擾):原理、影響與應(yīng)對(duì)措施

    EMI(電磁干擾):原理、影響與應(yīng)對(duì)措施?|深圳比創(chuàng)達(dá)電子EMC
    的頭像 發(fā)表于 03-26 11:22 ?2922次閱讀
    EMI(電磁干擾):原理、影響與<b class='flag-5'>應(yīng)對(duì)</b><b class='flag-5'>措施</b>?

    什么情況下電容器會(huì)被擊穿

    電容器是一種常見的電子元件,廣泛應(yīng)用于各個(gè)領(lǐng)域。然而,在特定條件,電容器可能會(huì)發(fā)生擊穿現(xiàn)象,導(dǎo)致其無法正常工作甚至損壞。那么,在什么情況下電容器會(huì)被擊穿呢?
    的頭像 發(fā)表于 02-19 14:11 ?3021次閱讀
    主站蜘蛛池模板: 女人张开双腿让男人桶完整 | 亚洲免费视频网址 | 亚洲国产欧美精品一区二区三区 | 天堂视频网 | 午夜在线亚洲男人午在线 | 午夜影院网页 | 另类专区欧美 | 免费观看视频网站 | 999国产精品| 四虎影院.com| 五月天婷婷爱 | 亚洲人成电影在在线观看网色 | 国产精品亚洲四区在线观看 | 一区二区三区伦理 | 毛色毛片| 国产小视频网站 | 国产卡1卡2卡三卡网站免费 | 亚洲综合黄色 | 调教双性学霸美人 | 91视频免费观看 | 激情在线播放免费视频高清 | 最近的中文字幕免费动漫视频 | 欧美色吧视频在线观看 | 天天干夜夜爱 | 中文字幕一区二区精品区 | 天天操天天干天天透 | 国产精品色婷婷在线观看 | 香蕉色网| 亚洲天天做夜夜做天天欢人人 | 亚洲人成www在线播放 | 日韩一级高清 | 国产精品久久久久久久免费大片 | 欧美精品xxxxbbbb | aa在线视频 | 亚洲 自拍 欧美 综合 | 窝窝视频成人影院午夜在线 | 狠狠干最新网址 | 欧美爆插| 性欧美成人免费观看视 | 欧美色婷婷天堂网站 | 久久伊人精品青青草原高清 |