那曲檬骨新材料有限公司

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

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

3天內不再提示

嵌入式軟件問題的分析與解決

麥辣雞腿堡 ? 來源:嵌入式系統 ? 作者:嵌入式系統 ? 2023-12-07 15:56 ? 次閱讀

軟件問題的分析與解決

嵌入式軟件由于調試手段的限制、部署場景的多樣化、軟硬件問題混合在一起、外部環境因素的影響等因素,導致軟件經常會遇到一些非常難以解決的問題。

3.1 解題思想

熟悉軟件的業務流程:從業務的角度發現問題、復現問題并解決問題。

熟悉軟件的總體架構:軟件架構是解決難題問題的基本框架,基于軟件架構解決問題不會陷入到局部細節,導致修復一個問題的同時產生新的問題,不會犯原則性、方向性錯誤。

熟悉軟件代碼的實現:熟悉代碼的細節,能夠更好、更快的在蛛絲馬跡中找到證據和突破點,甚至在問題還沒有收斂前,提供一種收斂的方向,引領問題的解決,對代碼的熟悉程度直接關系到解決問題的速度。

3.2 調試手段和信息不足相關問題

3.2.1 現場偶發性、難復現性引發的問題

一些偶發性現象級問題,甚至導致系統偶發性的重啟,無法復現,設備重啟之后,故障消失后,再也很難復現。

1、分析日志文件

從log中尋找異常提示,是應對不可重復性、偶發性故障最基本的手段。在系統某處發生異常時,一定會在log中留下蛛絲馬跡,可以請客戶協助提供串口日志,在log文件中查找問題。或者設備自己內部記錄log,但嵌入式設備由于存儲空間的限制,可能先前過于久遠的信息,就會被新的信息被覆蓋,針對這種情況,就需要定期清除無效日志。有些異常會導致系統重啟,而重啟之后,就會導致異常信息被正常重啟的信息覆蓋,這就需要系統能夠支持log的備份。不管怎么樣,log為定位現場問題提供了最基本的、最主要的信息來源。一個完善的log機制,對于定位現場問題非常有幫助。如果不滿足,可能首要任務是先完善日志功能。

2、回退軟件版本,緊急消除現場問題

有些現場問題,雖然偶發事件,但發生后影響嚴重,客戶無法接受。針對這種情況,在解決問題之前,可以先把軟件降級,降級到相對穩定,沒有嚴重故障的版本。

3、比較相鄰版本之間的代碼改動

如果不容易復現的故障,確認在升級了某個軟件版本之后才出現的,而其他現場條件都沒有變化,且分析log也無法發現異常點。此時,一種高效的解決此問題的方法,就是比較兩個版本之間的代碼的改動。

代碼改動比較少,分析代碼比較容易;如果代碼改動比較多,就需要根據用戶描述的現象,結合前后代碼的改動模塊,初步分析最可能是哪個模塊引起的,這種往往需要對系統架構較深刻的理解。在眾多修改模塊中,分析最有可能關聯的代碼模塊的改動,然后逐一排查 。分析代碼的改動與出現的現象之間可能的關聯關系,對開發人員個人的技術素養和方法論有較高的要求 。比較相鄰版本之間的代碼改動,針對某些棘手的現場問題,有時候確實是一個非常有效的手段。

4、問題復現

雖然常規來說現場很難復現,但可以人為的修改軟件、構建或增加模擬數據,人為創造或觸發條件,增加故障復現的幾率。在設計觸發條件時,需要圍繞用戶描述的現場故障現象來設計觸發條件,觀察是否能否復現,且表現一致。

5、分析代碼

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

6、增加 log 更新版本繼續測

如果常規的log無法展現故障的異常,就需要在猜測有可能的部分增加日志,在現場復測。但這種日志添加的位置是否合理,決定了問題再次出現時是否能定位問題的準確性。這種方法在工程實踐中,實施難度大,需要客戶多次配合。

3.2.2 現象與真正的原因不在一起的問題

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

解決這樣的問題,對技術人員的綜合技能的要求非常高,因為這個問題,不再是局部問題,而是發散到調查該問題的技術人員不熟悉的其他的軟件組件領域。即使對于熟悉整個系統的人而言,也是一個難點,因為問題的現象與根源之間的路徑是發散的,沒有一個確切的路徑。

首先,必須以故障的表面現象作為錨點,作為出發點。為后續進一步的調查立一個基點。根據現象找到出問題的代碼,根據代碼和log分析代碼的表面原因。如果確實是本處代碼的問題,直接在此解決即可。即頭痛醫頭,腳痛醫腳。

很多情形下,真正的原因不在顯示異常的地方,比如收到了異常的事件、或參數不合理、或自身狀態機的問題等。這時候就需要追溯,為什么會有這樣的事件或消息?有時候,由于復雜系統的程序員沒有系統的視角,常以為消除了故障表面現象就是解決了問題。很多時候站在系統的視角,可以從多個層面加以解決,消除異常事情,可以從規則過濾模塊解決,也可從前置模塊或后續模塊解決。具體在哪兒解決最合理,這就需要有系統和結構的視角。當然,也曾遇到有人解決類似問題是屏蔽異常消息或者屏蔽ASSERT,并沒從根源去消除為什么產生了異常。

3.2.3 報錯點發生在第三方庫內部

軟件報錯的地方是在第三方庫,而第三方庫有沒有源代碼或不熟悉

如果集成的第三方庫沒有源代碼,則把這個問題上報給第三方,讓第三方給出內部出錯的原因,更新庫或者配合抓日志分析。如果第三方庫有源代碼的話,可分析第三方代碼,增加日志或檢查傳入第三方庫函數的參數是否正確,是否合法;大多數時候,是錯誤地傳入了不合適的參數給第三方庫。檢查使用第三方的時序是否正確,在軟件系統中,時序是一個非常重要,同樣的函數,同樣的代碼,如果時序不對,也會導致代碼邏輯紊亂。不過現在提供庫或者SDK,一般都有技術支持,也可直接尋求幫助。

3.2.4 軟硬件結合導致的無法定位的問題

嵌入式系統中,有時候會出現硬件異常導致軟件狀態或邏輯錯誤,硬件人員很難根據有限的信息判斷硬件到底怎么了,通常軟件和硬件就會反復的踢皮球。但是用戶角度看到的異常是在軟件這邊。

由于硬件團隊對客戶現場的設備,通常沒有檢測手段來判斷是否真是硬件問題的,軟件團隊最好能夠通過日志配置,確認硬件故障單元。或者直接將壞機寄回硬件部門,軟件配合復現問題,以幫助硬件團隊判斷。

硬件故障問題,需要特別關注供電時鐘信號,復位時間等,曾經遇到幾次因為串口漏電出去導致外部傳感器復位異常的問題。總之,軟硬件的交合處,是容易扯皮的地方,這需要軟件人員也同時了解硬件的工作原理,在出故障時,能夠更好的判斷是軟件異常,還是硬件真的有故障。

還有一個商業上的問題,如果客戶感受到是硬件的問題,需要回收設備,會造成很大的經濟損失。一般情況下是軟件想辦法規避異常,畢竟軟件復制不需要成本。

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

    關注

    69

    文章

    5013

    瀏覽量

    88084
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    240

    瀏覽量

    26736
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69063
收藏 人收藏

    評論

    相關推薦

    基于UML嵌入式軟件的指紋門禁系統開發應用

    嵌入式系統的開發是一個軟硬件協同設計過程,它需要不同技術背景的人共同開發.而傳統的嵌入式軟件分析與設計方法嚴重脫節,開發過程沒有—個確定的統一的標準,這使得產品形成的每一個過程人為因素
    發表于 07-18 07:47

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

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

    什么是嵌入式軟件

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

    嵌入式軟件的問題分析

    嵌入式軟件的問題分析 1 問題背景一切為了進度,軟件開發的首要目標就是以最快的速度滿足客戶需求,“快”是第一要素,但是短期指標;可復用性、擴展性等長期指標被忽略,導致后期的維護、功能增
    發表于 11-17 09:29

    基于模塊化設計的嵌入式軟件測試方法

    分析嵌入式軟件的特點,綜述傳統的軟件測試方法;針對嵌入式軟件的特點,提出
    發表于 05-18 13:26 ?23次下載

    基于模塊化設計的嵌入式軟件測試方法

    摘要:分析嵌入式軟件的特點,綜述傳統的軟件測試方法;針對嵌入式軟件的特點,提出
    發表于 04-07 00:32 ?2079次閱讀
    基于模塊化設計的<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>測試方法

    嵌入式軟件系統設計中的正交性分析

    嵌入式軟件系統設計中的正交性分析 嵌入式軟件系統設計領域存在“正交”的思想。本文結合實際項目經驗,總結了
    發表于 03-29 15:09 ?683次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>系統設計中的正交性<b class='flag-5'>分析</b>

    什么是嵌入式軟件開發

    嵌入式軟件開發又是指什么?   隨著嵌入式軟件系統結構越來越復雜,嵌入式軟件的開發已成
    發表于 04-20 08:43 ?8802次閱讀

    ARM嵌入式軟件開發

    ARM嵌入式軟件開發ARM嵌入式軟件開發ARM嵌入式軟件開發
    發表于 01-15 17:29 ?65次下載

    嵌入式軟件開發的優勢分析

    為什么當今嵌入式行業會如此受歡迎呢?我們從事嵌入式軟件開發有什么好處嗎?小編就來說說我的看法吧,嵌入式軟件開發的優勢我們可以從幾點來看。
    的頭像 發表于 12-21 15:23 ?5290次閱讀

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

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

    嵌入式軟件的開發流程_嵌入式軟件的調試

    本文首先介紹了嵌入式軟件的發展,其次闡述了嵌入式軟件的開發流程,最后介紹了嵌入式軟件的調試。
    發表于 08-31 16:02 ?6354次閱讀

    嵌入式軟件測試參考書籍

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

    嵌入式軟件開發環境

    嵌入式軟件開發環境1 簡介嵌入式軟件定義嵌入式系統構成2 環境搭建2.1 Qt2.2 CLion2.3 Source Insight + v
    發表于 10-21 12:21 ?7次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開發環境

    嵌入式軟件開發的特點、設計流程、嵌入式軟件的結構

    ? ? ? ?嵌入式軟件開發的特點、設計流程、嵌入式軟件的結構?一:嵌入式軟件開發的特點1.?
    發表于 11-03 15:21 ?38次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開發的特點、設計流程、<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>的結構
    大发888真人娱乐场网址官网| 百家乐开发公司| 百家乐买对子技巧| 易胜博百家乐官网下载| 乐百家乐官网彩现金开户| 新世纪百家乐娱乐城| 仪征市| 视频百家乐游戏| 金臂百家乐官网注册送彩金| 大发888线上娱乐城二十一点| 足球百家乐官网网上投注| 澳门百家乐现场游戏| 百家乐官网账号变动原因| 百家乐娱乐平台网| 百家乐官网娱乐软件| 棋牌源码论坛| 百家乐赌博机销售| 最好百家乐官网的玩法技巧和规则 | 真人百家乐官网怎么玩| 澳门太阳城娱乐城| 做生意招财的东西| 在线百家乐官网官方网| 大发888娱乐城官| 百家乐官网园| 太阳城百家乐官网优惠| 女神娱乐城| 威尼斯人娱乐平台网址| 百家乐之对子的技巧| 真钱百家乐官网大转轮| 青海省| 大发888充值500| 百家乐百博| 百家乐销售视频| 线上百家乐官网网站| 大发888游戏平台dafa 888 gw| 视频百家乐试玩| 百家乐威尼斯人| 百家乐怎么骗人| 百家乐小路规则| 龙博百家乐的玩法技巧和规则| 百家乐破解视频|