亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于C++出現(xiàn)Bus error問題的排查與解決

 更新時(shí)間:2024年01月30日 10:36:53   作者:普羅米修斯Aaron_Swartz  
項(xiàng)目代碼中經(jīng)常出現(xiàn)莫名其妙的Bus error問題,并且代碼中增加很多try catch 后依然不能將錯(cuò)誤捕獲,一旦Bus erro出現(xiàn),進(jìn)程直接崩潰掉,所以本文給大家介紹了關(guān)于C++出現(xiàn)Bus error問題的排查與解決,需要的朋友可以參考下

前言

項(xiàng)目代碼中經(jīng)常出現(xiàn)莫名其妙的Bus error問題,并且代碼中增加很多try catch 后依然不能將錯(cuò)誤捕獲,一旦Bus erro出現(xiàn),進(jìn)程直接崩潰掉。類似如下這種:

異常提示

經(jīng)查詢google,出現(xiàn)該問題一般是因?yàn)榈刂肺磳R引起的,也就是程序試圖訪問一個(gè)不是地址的值。從而導(dǎo)致該錯(cuò)誤。后經(jīng)公司高工通過gdb運(yùn)行代碼后查看匯編發(fā)現(xiàn),寄存器中確實(shí)存儲(chǔ)了一個(gè)非地址的值(50位, 64位機(jī)器的實(shí)際內(nèi)存地址應(yīng)該為48位,高位用于尋址),導(dǎo)致在訪問時(shí)出現(xiàn)Bus-error。

更奇怪的是,該問題不會(huì)一直復(fù)現(xiàn),而是經(jīng)常跑幾個(gè)小時(shí),然后在調(diào)用函數(shù)指針的時(shí)候崩潰一次。提示UpdateDataPtr指向的一個(gè)空地址。

在這里插入圖片描述

對于此,高工的判斷要么是數(shù)組越界,要么是因?yàn)橐爸羔槍?dǎo)致該函數(shù)指針被意外修改。

順著這個(gè)思路,一開始是通過內(nèi)存監(jiān)控,查看是誰修改了該內(nèi)存,但是并未守到結(jié)果。此時(shí)高工想通過分析內(nèi)存的方式看能不能找到一些線索。

*** 操作方法就是在該指針前后增加標(biāo)記變量,然后通過程序掛掉時(shí)候的core dump 查看那時(shí)刻的內(nèi)存結(jié)構(gòu),從而嘗試分析問題***

std_function.h

最后發(fā)現(xiàn)代碼中的一個(gè)單例中定義了一個(gè)數(shù)組u_char crcbuf[64]; 在寫這個(gè)數(shù)據(jù)的時(shí)候發(fā)生越界,最終將該變量下的指針變量也覆蓋了

寫成我們接收到的里程計(jì)數(shù)據(jù)了,從此真相大白!

在這里插入圖片描述

對于此,接著分析是如何導(dǎo)致該問題的呢?

看看報(bào)文就知道了,正常報(bào)文的數(shù)據(jù)部分出現(xiàn)了報(bào)頭一樣的情況,導(dǎo)致程序誤認(rèn)為讀取的數(shù)據(jù)大小為176個(gè)字節(jié),那么在計(jì)算crcbuf的時(shí)候也會(huì)嘗試放入176個(gè)字節(jié),最終產(chǎn)生數(shù)組越界,將函數(shù)指針覆蓋。

問題數(shù)據(jù)

總結(jié)

1 該問題從出現(xiàn)到解決持續(xù)了好幾周,一直沒有好的方案。

2 遇到問題不能回避,應(yīng)該迎難而上,實(shí)在不行請教公司高工。

3 C++ 中無法對數(shù)組越界的問題進(jìn)行捕獲, 因此務(wù)必小心使用數(shù)組和指針

4 C++中內(nèi)存分析和gdb調(diào)試要及早掌握,對于分析復(fù)雜問題幫助很大

以上就是關(guān)于C++出現(xiàn)Bus error問題的排查與解決的詳細(xì)內(nèi)容,更多關(guān)于C++出現(xiàn)Bus error的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實(shí)現(xiàn)馬踏棋盤(騎士周游)

    C++實(shí)現(xiàn)馬踏棋盤(騎士周游)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)馬踏棋盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言趣味編程之水仙花數(shù)

    C語言趣味編程之水仙花數(shù)

    這篇文章介紹了C語言趣味編程之水仙花數(shù),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • C語言實(shí)現(xiàn)猜數(shù)字游戲

    C語言實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++中靜態(tài)初始化數(shù)組與動(dòng)態(tài)初始化數(shù)組詳解

    C++中靜態(tài)初始化數(shù)組與動(dòng)態(tài)初始化數(shù)組詳解

    今天小編就為大家分享一篇C++中靜態(tài)初始化數(shù)組與動(dòng)態(tài)初始化數(shù)組詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C++實(shí)現(xiàn)DES加密算法實(shí)例解析

    C++實(shí)現(xiàn)DES加密算法實(shí)例解析

    這篇文章主要介紹了C++實(shí)現(xiàn)DES加密算法實(shí)例解析,是一個(gè)很實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • C與C++ 無參函數(shù)的區(qū)別解析

    C與C++ 無參函數(shù)的區(qū)別解析

    在《C++ 編程思想》:“關(guān)于無參函數(shù)聲明,C與C++有很大的差別。在C語言中,聲明int fun1(),意味著一個(gè)可以有任意數(shù)目和類型的函數(shù);而在C++中,指的卻是一個(gè)沒有參數(shù)的函數(shù)”
    2013-07-07
  • OpenCV利用對比度亮度變換實(shí)現(xiàn)水印去除

    OpenCV利用對比度亮度變換實(shí)現(xiàn)水印去除

    OpenCV中去除水印最常用的方法是inpaint,通過圖像修復(fù)的方法來去除水印。本文將介紹另一種方法:利用對比度亮度變換去除水印,需要的朋友可以參考一下
    2021-11-11
  • OpenCV實(shí)現(xiàn)低對比度圖像臟污區(qū)域檢測

    OpenCV實(shí)現(xiàn)低對比度圖像臟污區(qū)域檢測

    本文主要介紹了OpenCV實(shí)現(xiàn)低對比度圖像臟污區(qū)域檢測,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++實(shí)現(xiàn)LeetCode(82.移除有序鏈表中的重復(fù)項(xiàng)之二)

    C++實(shí)現(xiàn)LeetCode(82.移除有序鏈表中的重復(fù)項(xiàng)之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(82.移除有序鏈表中的重復(fù)項(xiàng)之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言PlaySound函數(shù)使用方法

    C語言PlaySound函數(shù)使用方法

    這篇文章介紹了C語言PlaySound函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評(píng)論