哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

工程師鄧生 ? 來(lái)源:玩轉(zhuǎn)單片機(jī)與嵌入式 ? 作者:風(fēng)雨無(wú)阻 ? 2022-09-05 17:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

01

堆棧溢出

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

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

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

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

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

為了避免發(fā)生堆棧溢出這種錯(cuò)誤,我們可以通過(guò)自上而下的代碼控制流分析方法,來(lái)證明代碼是否會(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)行過(guò)程中,大量的、無(wú)序的任務(wù)一直在運(yùn)行,但是資源是有限的,兩個(gè)不同的任務(wù)之間可能就存在競(jìng)爭(zhēng)資源的情況,由于兩個(gè)或者多個(gè)進(jìn)程競(jìng)爭(zhēng)使用不能被同時(shí)訪問(wèn)的資源,使得這些進(jìn)程有可能因?yàn)闀r(shí)間上推進(jìn)的先后原因而出現(xiàn)問(wè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ī)制來(lái)保護(hù)數(shù)據(jù)(如互斥體),確保只有進(jìn)行修改的線程才能看到不變量被破壞時(shí)的中間狀態(tài);

2、使用無(wú)鎖編程;

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

03

不可重入函數(shù)

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

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

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

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

函數(shù)中使用了靜態(tài)變量,無(wú)論是全局變量還是局部靜態(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ǔ)的成員變量

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

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

避免措施:

在每個(gè)庫(kù)或驅(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ù)通過(guò)信號(hào)量機(jī)制訪問(wèn)共享資源時(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),就由于,此處所說(shuō)的,優(yōu)先級(jí)反轉(zhuǎn),而導(dǎo)致了內(nèi)部執(zhí)行邏輯出錯(cuò)的bug。

在1997年7月4號(hào)發(fā)射后,在開(kāi)始搜集氣象數(shù)據(jù)之后沒(méi)幾天,系統(tǒng)(無(wú)故)重啟了。后來(lái),當(dāng)然,被相關(guān)技術(shù)人員找到問(wèn)題根源,就是,這個(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í)提升到可訪問(wèn)這個(gè)資源的所有線程中的最高優(yōu)先級(jí),這個(gè)優(yōu)先級(jí)稱為該資源的優(yōu)先級(jí)天花板。這種方法簡(jiǎn)單易行,不必進(jìn)行復(fù)雜的判斷,不管線程是否阻塞了高優(yōu)先級(jí)線程的運(yùn)行, 只要線程訪問(wèn)共享資源都會(huì)提升線程的優(yōu)先級(jí)。

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

優(yōu)先級(jí)繼承是當(dāng)線程A申請(qǐng)共享資源Source時(shí),如果共享資源Source正在被線程C使用,通過(guò)比較線程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)存由于某種原因程序未釋放或無(wú)法釋放,造成系統(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),如果沒(méi)有釋放,那么這塊內(nèi)存區(qū)域就將處于不可用狀態(tài)(就像占著茅坑不拉屎一樣),程序大了或運(yùn)行久了就極有可能會(huì)導(dǎo)致內(nèi)存的泄露(重啟一下就能解決90%的問(wèn)題根源),同時(shí)我們?cè)卺尫诺臅r(shí)候也要注意釋放的內(nèi)存只能釋放一次,不要重復(fù)的釋放,有的時(shí)候代碼量會(huì)比較大,所以有可能會(huì)在不止一處地方進(jìn)行了代碼的釋放操作。因?yàn)槲覀儍?nèi)存釋放了一次后,該內(nèi)存區(qū)域就有可能用來(lái)做別的事了,如果這時(shí)候我們又再釋放一遍就很有可能會(huì)出現(xiàn)問(wèn)題了。釋放完之后最好把指針指向空地址,避免下次再使用指針的時(shí)候出現(xiàn)地址的錯(cuò)誤。



審核編輯:劉清

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

    關(guān)注

    8

    文章

    1401

    瀏覽量

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

    關(guān)注

    0

    文章

    96

    瀏覽量

    11501
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    869

    瀏覽量

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

    關(guān)注

    0

    文章

    10

    瀏覽量

    8115

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    PLC無(wú)線通訊模塊的風(fēng)險(xiǎn)與應(yīng)對(duì)

    應(yīng)對(duì)措施 1、信號(hào)干擾與穩(wěn)定性 工業(yè)環(huán)境中的電磁干擾可能導(dǎo)致數(shù)據(jù)傳輸中斷或誤碼。通過(guò)以下方式提升抗干擾能力: 硬件設(shè)計(jì):集成 EMI 抗干擾濾波單元,經(jīng)過(guò)工業(yè)現(xiàn)場(chǎng)考驗(yàn),可在復(fù)雜電磁環(huán)境中穩(wěn)定運(yùn)行。 2、數(shù)據(jù)安全與加密 通過(guò)以下
    的頭像 發(fā)表于 01-23 10:48 ?326次閱讀
    PLC無(wú)線通訊模塊的風(fēng)險(xiǎn)與<b class='flag-5'>應(yīng)對(duì)</b>

    濕熱環(huán)境的隱患:如何避免聚氨酯灌封膠水解風(fēng)險(xiǎn)? | 鉻銳特實(shí)業(yè)

    聚氨酯灌封膠在高溫高濕環(huán)境易發(fā)生水解,導(dǎo)致膠體發(fā)黏、絕緣下降甚至失效。本文詳細(xì)講解水解機(jī)理、失敗表現(xiàn)及實(shí)用的預(yù)防措施,幫助您選擇耐水解聚氨酯灌封膠,有效規(guī)避濕熱環(huán)境風(fēng)險(xiǎn),大幅提升電子
    的頭像 發(fā)表于 12-08 01:23 ?891次閱讀
    濕熱環(huán)境<b class='flag-5'>下</b>的隱患:如何避免聚氨酯灌封膠水解風(fēng)險(xiǎn)? | 鉻銳特實(shí)業(yè)

    頻譜芯片常見(jiàn)故障和預(yù)防措施

    、對(duì)基帶處理和數(shù)字信號(hào)處理模塊進(jìn)行嚴(yán)格的測(cè)試和驗(yàn)證,確保其正常工作。 3、定期進(jìn)行維護(hù)和保養(yǎng),檢查和清潔芯片內(nèi)部的射頻接口和連接器。 4、配備合適的散熱系統(tǒng),確保芯片的溫度正常,避免過(guò)熱導(dǎo)致故障。 5、對(duì)芯片進(jìn)行定期的固件和軟件
    發(fā)表于 12-05 07:15

    CW32 MCU在高頻率運(yùn)行的系統(tǒng)穩(wěn)定性的提升方案

    問(wèn)題,并提出系列應(yīng)對(duì)措施,包括硬件設(shè)計(jì)改進(jìn)和軟件優(yōu)化策略,以確保系統(tǒng)在高頻工作環(huán)境中的可靠性和持續(xù)穩(wěn)定運(yùn)行。 具體內(nèi)容包括: 高頻運(yùn)行對(duì)MCU的影響分析: 探討CW32 MCU
    發(fā)表于 12-04 08:04

    華昕|如何測(cè)量晶振好壞-最后一種最實(shí)用

    網(wǎng)傳很多晶振的測(cè)量方法,都說(shuō)的頭頭是道,可是經(jīng)華昕FAE實(shí)際實(shí)驗(yàn)發(fā)現(xiàn),很多沒(méi)有效果,萬(wàn)用表,測(cè)電筆,示波器到底哪種才是最準(zhǔn)確的。我們測(cè)試一下網(wǎng)上說(shuō)的幾種測(cè)試晶振好壞的方法,看一下他們是否好用。01
    的頭像 發(fā)表于 10-31 18:15 ?1955次閱讀
    華昕|如何測(cè)量晶振好壞-最后<b class='flag-5'>一種</b>最實(shí)用

    DDR5 設(shè)計(jì)指南():DDR5 VS LPDDR5

    DDR 的比較以及 DDR5 與 LPDDR5 的差異以及 DDR5 的拓?fù)浣Y(jié)構(gòu)。 什么是 DDR5
    的頭像 發(fā)表于 10-27 19:28 ?1.2w次閱讀
    DDR<b class='flag-5'>5</b> 設(shè)計(jì)指南(<b class='flag-5'>一</b>):DDR<b class='flag-5'>5</b> VS LPDDR<b class='flag-5'>5</b>

    rtthread_studio 使用lwip軟件包變異報(bào)錯(cuò),是什么原因?

    最近學(xué)習(xí)使用rtthread_studio 開(kāi)發(fā)stm32f407網(wǎng)絡(luò)通信,打開(kāi)lwip軟件包,結(jié)果變異報(bào)錯(cuò),網(wǎng)上查了一下,沒(méi)人遇到過(guò)這個(gè)情況,好像簡(jiǎn)單設(shè)置一下就能編譯通過(guò),怎么我這就
    發(fā)表于 10-13 07:59

    激光錫焊出現(xiàn)氣孔的原因及應(yīng)對(duì)措施

    激光錫焊有很多優(yōu)點(diǎn),高效,快速等等。但是在激光錫焊的過(guò)程中,可能因?yàn)檫@樣或者那樣的原因,造成焊接點(diǎn)存在氣孔。松盛光電來(lái)給大家介紹一下激光錫焊焊點(diǎn)氣孔存在的原因及相應(yīng)的解決方案,來(lái)了解一下吧。
    的頭像 發(fā)表于 08-18 09:22 ?1638次閱讀

    變壓器過(guò)負(fù)荷如何處理,五個(gè)應(yīng)對(duì)措施讓你輕松應(yīng)對(duì)

    變壓器是電力系統(tǒng)中非常重要的設(shè)備之,用于電壓變換,但在實(shí)際使用時(shí),變壓器會(huì)遇到負(fù)荷的情況,若不及時(shí)處理,會(huì)導(dǎo)致變壓器過(guò)熱,縮短其使用壽命,甚至引起變壓器損壞,那么當(dāng)變壓器過(guò)負(fù)荷時(shí),我們應(yīng)該采取哪些
    的頭像 發(fā)表于 08-15 15:10 ?1419次閱讀
    變壓器過(guò)負(fù)荷如何處理,五個(gè)<b class='flag-5'>應(yīng)對(duì)</b><b class='flag-5'>措施</b>讓你輕松<b class='flag-5'>應(yīng)對(duì)</b>

    奧比中光助力支付寶碰一下落地電梯場(chǎng)景

    近日,支付寶與分眾傳媒宣布聯(lián)合推出“碰一下搶紅包”服務(wù)。作為創(chuàng)新交互方式,“支付寶碰一下”首次被引入至電梯場(chǎng)景,并已在全國(guó)20余個(gè)城市的電梯鋪設(shè)。奧比中光作為“支付寶碰一下”業(yè)務(wù)的核心供應(yīng)商,為這
    的頭像 發(fā)表于 08-12 11:32 ?1382次閱讀

    大家都在用什么AI軟件?有沒(méi)有好用的免費(fèi)的AI軟件推薦一下?

    大家都在用什么AI軟件?有沒(méi)有好用的免費(fèi)的AI軟件推薦一下?直接發(fā)個(gè)安裝包,謝謝。比如deepseek、Chatgpt、豆包、阿里AI、百度AI、騰訊AI,哪個(gè)能用、好用?沒(méi)找到安裝包,都是在線搜索?想要Windows版本和IO
    發(fā)表于 07-09 18:30

    “碰一下”支付終端應(yīng)用在酒店:智能無(wú)卡入住與客房控制

    “碰一下”支付終端和“碰一下”支付機(jī)具今年已在各種餐飲零售門店推廣應(yīng)用。就連天波小編家附近的村口小超市也用上了“碰一下”支付終端。近日,鹵味龍頭企業(yè)絕味食品宣布,全國(guó)門店將接入“支付寶碰一下
    的頭像 發(fā)表于 07-04 09:57 ?986次閱讀
    “碰<b class='flag-5'>一下</b>”支付終端應(yīng)用在酒店:智能無(wú)卡入住與客房控制

    nRF5 SDK軟件架構(gòu)及softdevice工作原理

    SDK,建議先看一下這篇文章“Nordic nRF5 SDK和softdevice介紹”,以建立Nordic nRF5 SDK的些基本知識(shí)。 首先說(shuō)明
    的頭像 發(fā)表于 06-23 11:08 ?857次閱讀
    nRF<b class='flag-5'>5</b> SDK<b class='flag-5'>軟件</b>架構(gòu)及softdevice工作原理

    一下終端,讓自助售貨機(jī)秒變 “家里的冰箱”

    繼刷臉支付后,支付寶近日又推出了新的支付方式——碰一下支付。只需將手機(jī)輕輕靠近支付寶“碰一下”支付終端,即可完成支付,比以往要先解鎖手機(jī),調(diào)出APP的付款碼再支付的操作環(huán)節(jié)要便捷和省時(shí)許多?!芭?b class='flag-5'>一下
    的頭像 發(fā)表于 06-18 10:49 ?2101次閱讀
    碰<b class='flag-5'>一下</b>終端,讓自助售貨機(jī)秒變 “家里的冰箱”

    如何應(yīng)對(duì)步進(jìn)電機(jī)的各種干攏問(wèn)題

    步進(jìn)電機(jī)的干擾問(wèn)題是個(gè)復(fù)雜且常見(jiàn)的話題,這些干擾可能來(lái)源于步進(jìn)電機(jī)本身,也可能來(lái)自外部環(huán)境。為了有效地應(yīng)對(duì)這些干擾,可以從以下幾個(gè)方面進(jìn)行考慮和解決。 、步進(jìn)電機(jī)對(duì)外部的干擾及其應(yīng)對(duì)
    的頭像 發(fā)表于 05-11 17:38 ?1523次閱讀
    如何<b class='flag-5'>應(yīng)對(duì)</b>步進(jìn)電機(jī)的各種干攏問(wèn)題
    木里| 澎湖县| 兴安盟| 上饶县| 赤壁市| 沁阳市| 星子县| 迁安市| 比如县| 沾化县| 平定县| 连平县| 东宁县| 张掖市| 洪湖市| 微博| 西林县| 贵溪市| 新竹县| 高要市| 白山市| 民乐县| 峡江县| 基隆市| 安吉县| 米脂县| 富阳市| 江川县| 侯马市| 安福县| 独山县| 香港| 德清县| 马龙县| 陵川县| 赣州市| 梓潼县| 玉龙| 上栗县| 治县。| 稻城县|