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

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

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

嵌入式軟件問(wèn)題的分析與解決

麥辣雞腿堡 ? 來(lái)源:嵌入式系統(tǒng) ? 作者:嵌入式系統(tǒng) ? 2023-12-07 15:56 ? 次閱讀

軟件問(wèn)題的分析與解決

嵌入式軟件由于調(diào)試手段的限制、部署場(chǎng)景的多樣化、軟硬件問(wèn)題混合在一起、外部環(huán)境因素的影響等因素,導(dǎo)致軟件經(jīng)常會(huì)遇到一些非常難以解決的問(wèn)題。

3.1 解題思想

熟悉軟件的業(yè)務(wù)流程:從業(yè)務(wù)的角度發(fā)現(xiàn)問(wèn)題、復(fù)現(xiàn)問(wèn)題并解決問(wèn)題。

熟悉軟件的總體架構(gòu):軟件架構(gòu)是解決難題問(wèn)題的基本框架,基于軟件架構(gòu)解決問(wèn)題不會(huì)陷入到局部細(xì)節(jié),導(dǎo)致修復(fù)一個(gè)問(wèn)題的同時(shí)產(chǎn)生新的問(wèn)題,不會(huì)犯原則性、方向性錯(cuò)誤。

熟悉軟件代碼的實(shí)現(xiàn):熟悉代碼的細(xì)節(jié),能夠更好、更快的在蛛絲馬跡中找到證據(jù)和突破點(diǎn),甚至在問(wèn)題還沒(méi)有收斂前,提供一種收斂的方向,引領(lǐng)問(wèn)題的解決,對(duì)代碼的熟悉程度直接關(guān)系到解決問(wèn)題的速度。

3.2 調(diào)試手段和信息不足相關(guān)問(wèn)題

3.2.1 現(xiàn)場(chǎng)偶發(fā)性、難復(fù)現(xiàn)性引發(fā)的問(wèn)題

一些偶發(fā)性現(xiàn)象級(jí)問(wèn)題,甚至導(dǎo)致系統(tǒng)偶發(fā)性的重啟,無(wú)法復(fù)現(xiàn),設(shè)備重啟之后,故障消失后,再也很難復(fù)現(xiàn)。

1、分析日志文件

從log中尋找異常提示,是應(yīng)對(duì)不可重復(fù)性、偶發(fā)性故障最基本的手段。在系統(tǒng)某處發(fā)生異常時(shí),一定會(huì)在log中留下蛛絲馬跡,可以請(qǐng)客戶協(xié)助提供串口日志,在log文件中查找問(wèn)題?;蛘咴O(shè)備自己內(nèi)部記錄log,但嵌入式設(shè)備由于存儲(chǔ)空間的限制,可能先前過(guò)于久遠(yuǎn)的信息,就會(huì)被新的信息被覆蓋,針對(duì)這種情況,就需要定期清除無(wú)效日志。有些異常會(huì)導(dǎo)致系統(tǒng)重啟,而重啟之后,就會(huì)導(dǎo)致異常信息被正常重啟的信息覆蓋,這就需要系統(tǒng)能夠支持log的備份。不管怎么樣,log為定位現(xiàn)場(chǎng)問(wèn)題提供了最基本的、最主要的信息來(lái)源。一個(gè)完善的log機(jī)制,對(duì)于定位現(xiàn)場(chǎng)問(wèn)題非常有幫助。如果不滿足,可能首要任務(wù)是先完善日志功能。

2、回退軟件版本,緊急消除現(xiàn)場(chǎng)問(wèn)題

有些現(xiàn)場(chǎng)問(wèn)題,雖然偶發(fā)事件,但發(fā)生后影響嚴(yán)重,客戶無(wú)法接受。針對(duì)這種情況,在解決問(wèn)題之前,可以先把軟件降級(jí),降級(jí)到相對(duì)穩(wěn)定,沒(méi)有嚴(yán)重故障的版本。

3、比較相鄰版本之間的代碼改動(dòng)

如果不容易復(fù)現(xiàn)的故障,確認(rèn)在升級(jí)了某個(gè)軟件版本之后才出現(xiàn)的,而其他現(xiàn)場(chǎng)條件都沒(méi)有變化,且分析log也無(wú)法發(fā)現(xiàn)異常點(diǎn)。此時(shí),一種高效的解決此問(wèn)題的方法,就是比較兩個(gè)版本之間的代碼的改動(dòng)。

代碼改動(dòng)比較少,分析代碼比較容易;如果代碼改動(dòng)比較多,就需要根據(jù)用戶描述的現(xiàn)象,結(jié)合前后代碼的改動(dòng)模塊,初步分析最可能是哪個(gè)模塊引起的,這種往往需要對(duì)系統(tǒng)架構(gòu)較深刻的理解。在眾多修改模塊中,分析最有可能關(guān)聯(lián)的代碼模塊的改動(dòng),然后逐一排查 。分析代碼的改動(dòng)與出現(xiàn)的現(xiàn)象之間可能的關(guān)聯(lián)關(guān)系,對(duì)開(kāi)發(fā)人員個(gè)人的技術(shù)素養(yǎng)和方法論有較高的要求 。比較相鄰版本之間的代碼改動(dòng),針對(duì)某些棘手的現(xiàn)場(chǎng)問(wèn)題,有時(shí)候確實(shí)是一個(gè)非常有效的手段。

4、問(wèn)題復(fù)現(xiàn)

雖然常規(guī)來(lái)說(shuō)現(xiàn)場(chǎng)很難復(fù)現(xiàn),但可以人為的修改軟件、構(gòu)建或增加模擬數(shù)據(jù),人為創(chuàng)造或觸發(fā)條件,增加故障復(fù)現(xiàn)的幾率。在設(shè)計(jì)觸發(fā)條件時(shí),需要圍繞用戶描述的現(xiàn)場(chǎng)故障現(xiàn)象來(lái)設(shè)計(jì)觸發(fā)條件,觀察是否能否復(fù)現(xiàn),且表現(xiàn)一致。

5、分析代碼

根據(jù)用戶描述的現(xiàn)象,硬分析代碼,是一種通用的方法,放之四海皆準(zhǔn)的方法,熟悉自身代碼的邏輯關(guān)系是基本功,但解決問(wèn)題的效率就比較難把握了。

6、增加 log 更新版本繼續(xù)測(cè)

如果常規(guī)的log無(wú)法展現(xiàn)故障的異常,就需要在猜測(cè)有可能的部分增加日志,在現(xiàn)場(chǎng)復(fù)測(cè)。但這種日志添加的位置是否合理,決定了問(wèn)題再次出現(xiàn)時(shí)是否能定位問(wèn)題的準(zhǔn)確性。這種方法在工程實(shí)踐中,實(shí)施難度大,需要客戶多次配合。

3.2.2 現(xiàn)象與真正的原因不在一起的問(wèn)題

大多時(shí)候解決軟件故障,是可以做到頭痛醫(yī)頭,腳痛醫(yī)腳。有些時(shí)候,頭痛的原因并不在“頭”,而在“腳”。這就需要知道“頭痛” 與 “腳” 的某種關(guān)聯(lián)關(guān)系。

解決這樣的問(wèn)題,對(duì)技術(shù)人員的綜合技能的要求非常高,因?yàn)檫@個(gè)問(wèn)題,不再是局部問(wèn)題,而是發(fā)散到調(diào)查該問(wèn)題的技術(shù)人員不熟悉的其他的軟件組件領(lǐng)域。即使對(duì)于熟悉整個(gè)系統(tǒng)的人而言,也是一個(gè)難點(diǎn),因?yàn)閱?wèn)題的現(xiàn)象與根源之間的路徑是發(fā)散的,沒(méi)有一個(gè)確切的路徑。

首先,必須以故障的表面現(xiàn)象作為錨點(diǎn),作為出發(fā)點(diǎn)。為后續(xù)進(jìn)一步的調(diào)查立一個(gè)基點(diǎn)。根據(jù)現(xiàn)象找到出問(wèn)題的代碼,根據(jù)代碼和log分析代碼的表面原因。如果確實(shí)是本處代碼的問(wèn)題,直接在此解決即可。即頭痛醫(yī)頭,腳痛醫(yī)腳。

很多情形下,真正的原因不在顯示異常的地方,比如收到了異常的事件、或參數(shù)不合理、或自身狀態(tài)機(jī)的問(wèn)題等。這時(shí)候就需要追溯,為什么會(huì)有這樣的事件或消息?有時(shí)候,由于復(fù)雜系統(tǒng)的程序員沒(méi)有系統(tǒng)的視角,常以為消除了故障表面現(xiàn)象就是解決了問(wèn)題。很多時(shí)候站在系統(tǒng)的視角,可以從多個(gè)層面加以解決,消除異常事情,可以從規(guī)則過(guò)濾模塊解決,也可從前置模塊或后續(xù)模塊解決。具體在哪兒解決最合理,這就需要有系統(tǒng)和結(jié)構(gòu)的視角。當(dāng)然,也曾遇到有人解決類似問(wèn)題是屏蔽異常消息或者屏蔽ASSERT,并沒(méi)從根源去消除為什么產(chǎn)生了異常。

3.2.3 報(bào)錯(cuò)點(diǎn)發(fā)生在第三方庫(kù)內(nèi)部

軟件報(bào)錯(cuò)的地方是在第三方庫(kù),而第三方庫(kù)有沒(méi)有源代碼或不熟悉

如果集成的第三方庫(kù)沒(méi)有源代碼,則把這個(gè)問(wèn)題上報(bào)給第三方,讓第三方給出內(nèi)部出錯(cuò)的原因,更新庫(kù)或者配合抓日志分析。如果第三方庫(kù)有源代碼的話,可分析第三方代碼,增加日志或檢查傳入第三方庫(kù)函數(shù)的參數(shù)是否正確,是否合法;大多數(shù)時(shí)候,是錯(cuò)誤地傳入了不合適的參數(shù)給第三方庫(kù)。檢查使用第三方的時(shí)序是否正確,在軟件系統(tǒng)中,時(shí)序是一個(gè)非常重要,同樣的函數(shù),同樣的代碼,如果時(shí)序不對(duì),也會(huì)導(dǎo)致代碼邏輯紊亂。不過(guò)現(xiàn)在提供庫(kù)或者SDK,一般都有技術(shù)支持,也可直接尋求幫助。

3.2.4 軟硬件結(jié)合導(dǎo)致的無(wú)法定位的問(wèn)題

嵌入式系統(tǒng)中,有時(shí)候會(huì)出現(xiàn)硬件異常導(dǎo)致軟件狀態(tài)或邏輯錯(cuò)誤,硬件人員很難根據(jù)有限的信息判斷硬件到底怎么了,通常軟件和硬件就會(huì)反復(fù)的踢皮球。但是用戶角度看到的異常是在軟件這邊。

由于硬件團(tuán)隊(duì)對(duì)客戶現(xiàn)場(chǎng)的設(shè)備,通常沒(méi)有檢測(cè)手段來(lái)判斷是否真是硬件問(wèn)題的,軟件團(tuán)隊(duì)最好能夠通過(guò)日志配置,確認(rèn)硬件故障單元。或者直接將壞機(jī)寄回硬件部門,軟件配合復(fù)現(xiàn)問(wèn)題,以幫助硬件團(tuán)隊(duì)判斷。

硬件故障問(wèn)題,需要特別關(guān)注供電、時(shí)鐘信號(hào),復(fù)位時(shí)間等,曾經(jīng)遇到幾次因?yàn)榇诼╇姵鋈?dǎo)致外部傳感器復(fù)位異常的問(wèn)題??傊?,軟硬件的交合處,是容易扯皮的地方,這需要軟件人員也同時(shí)了解硬件的工作原理,在出故障時(shí),能夠更好的判斷是軟件異常,還是硬件真的有故障。

還有一個(gè)商業(yè)上的問(wèn)題,如果客戶感受到是硬件的問(wèn)題,需要回收設(shè)備,會(huì)造成很大的經(jīng)濟(jì)損失。一般情況下是軟件想辦法規(guī)避異常,畢竟軟件復(fù)制不需要成本。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    4570

    瀏覽量

    86696
  • 嵌入式軟件
    +關(guān)注

    關(guān)注

    4

    文章

    238

    瀏覽量

    26550
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67765
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于UML嵌入式軟件的指紋門禁系統(tǒng)開(kāi)發(fā)應(yīng)用

    嵌入式系統(tǒng)的開(kāi)發(fā)是一個(gè)軟硬件協(xié)同設(shè)計(jì)過(guò)程,它需要不同技術(shù)背景的人共同開(kāi)發(fā).而傳統(tǒng)的嵌入式軟件分析與設(shè)計(jì)方法嚴(yán)重脫節(jié),開(kāi)發(fā)過(guò)程沒(méi)有—個(gè)確定的統(tǒng)一的標(biāo)準(zhǔn),這使得產(chǎn)品形成的每一個(gè)過(guò)程人為因素
    發(fā)表于 07-18 07:47

    RVS嵌入式軟件分析套件介紹

    RVS — 嵌入式軟件分析套件
    發(fā)表于 01-15 06:28

    什么是嵌入式軟件

    概述:什么是嵌入式軟件?與傳統(tǒng)軟件不同,嵌入式軟件需要將軟件
    發(fā)表于 10-28 08:45

    嵌入式軟件的問(wèn)題分析

    嵌入式軟件的問(wèn)題分析 1 問(wèn)題背景一切為了進(jìn)度,軟件開(kāi)發(fā)的首要目標(biāo)就是以最快的速度滿足客戶需求,“快”是第一要素,但是短期指標(biāo);可復(fù)用性、擴(kuò)展性等長(zhǎng)期指標(biāo)被忽略,導(dǎo)致后期的維護(hù)、功能增
    發(fā)表于 11-17 09:29

    基于模塊化設(shè)計(jì)的嵌入式軟件測(cè)試方法

    分析嵌入式軟件的特點(diǎn),綜述傳統(tǒng)的軟件測(cè)試方法;針對(duì)嵌入式軟件的特點(diǎn),提出
    發(fā)表于 05-18 13:26 ?23次下載

    基于模塊化設(shè)計(jì)的嵌入式軟件測(cè)試方法

    摘要:分析嵌入式軟件的特點(diǎn),綜述傳統(tǒng)的軟件測(cè)試方法;針對(duì)嵌入式軟件的特點(diǎn),提出
    發(fā)表于 04-07 00:32 ?1978次閱讀
    基于模塊化設(shè)計(jì)的<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>測(cè)試方法

    嵌入式軟件系統(tǒng)設(shè)計(jì)中的正交性分析

    嵌入式軟件系統(tǒng)設(shè)計(jì)中的正交性分析 嵌入式軟件系統(tǒng)設(shè)計(jì)領(lǐng)域存在“正交”的思想。本文結(jié)合實(shí)際項(xiàng)目經(jīng)驗(yàn),總結(jié)了
    發(fā)表于 03-29 15:09 ?649次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>系統(tǒng)設(shè)計(jì)中的正交性<b class='flag-5'>分析</b>

    什么是嵌入式軟件開(kāi)發(fā)

    嵌入式軟件開(kāi)發(fā)又是指什么?   隨著嵌入式軟件系統(tǒng)結(jié)構(gòu)越來(lái)越復(fù)雜,嵌入式軟件的開(kāi)發(fā)已成
    發(fā)表于 04-20 08:43 ?8684次閱讀

    ARM嵌入式軟件開(kāi)發(fā)

    ARM嵌入式軟件開(kāi)發(fā)ARM嵌入式軟件開(kāi)發(fā)ARM嵌入式軟件開(kāi)發(fā)
    發(fā)表于 01-15 17:29 ?64次下載

    嵌入式軟件開(kāi)發(fā)的優(yōu)勢(shì)分析

    為什么當(dāng)今嵌入式行業(yè)會(huì)如此受歡迎呢?我們從事嵌入式軟件開(kāi)發(fā)有什么好處嗎?小編就來(lái)說(shuō)說(shuō)我的看法吧,嵌入式軟件開(kāi)發(fā)的優(yōu)勢(shì)我們可以從幾點(diǎn)來(lái)看。
    的頭像 發(fā)表于 12-21 15:23 ?5111次閱讀

    嵌入式軟件是什么意思_嵌入式軟件的分類有哪些

    本文首先闡述了嵌入式軟件的概念,其次介紹了嵌入式軟件的特征,最后介紹了嵌入式軟件的分類。
    發(fā)表于 08-31 15:54 ?1.6w次閱讀

    嵌入式軟件的開(kāi)發(fā)流程_嵌入式軟件的調(diào)試

    本文首先介紹了嵌入式軟件的發(fā)展,其次闡述了嵌入式軟件的開(kāi)發(fā)流程,最后介紹了嵌入式軟件的調(diào)試。
    發(fā)表于 08-31 16:02 ?6126次閱讀

    嵌入式軟件測(cè)試參考書籍

    嵌入式軟件測(cè)試的幾本參考書籍:1、《嵌入式軟件測(cè)試》;2、《嵌入式軟件測(cè)試 方法、案例與模板詳解
    發(fā)表于 10-20 12:06 ?51次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>測(cè)試參考書籍

    嵌入式軟件開(kāi)發(fā)環(huán)境

    嵌入式軟件開(kāi)發(fā)環(huán)境1 簡(jiǎn)介嵌入式軟件定義嵌入式系統(tǒng)構(gòu)成2 環(huán)境搭建2.1 Qt2.2 CLion2.3 Source Insight + v
    發(fā)表于 10-21 12:21 ?7次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開(kāi)發(fā)環(huán)境

    嵌入式軟件開(kāi)發(fā)的特點(diǎn)、設(shè)計(jì)流程、嵌入式軟件的結(jié)構(gòu)

    ? ? ? ?嵌入式軟件開(kāi)發(fā)的特點(diǎn)、設(shè)計(jì)流程、嵌入式軟件的結(jié)構(gòu)?一:嵌入式軟件開(kāi)發(fā)的特點(diǎn)1.?
    發(fā)表于 11-03 15:21 ?37次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開(kāi)發(fā)的特點(diǎn)、設(shè)計(jì)流程、<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>的結(jié)構(gòu)