国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

麒麟系統(tǒng)開發(fā)筆記(十一):在國產(chǎn)麒麟系統(tǒng)上使用gdb定位崩潰異常方法流程進(jìn)階定位代

2023-03-31 09:14 作者:紅胖子_AAA紅模仿  | 我要投稿

前言

??上一篇,通過研究,可以定位到函數(shù),本篇進(jìn)一步優(yōu)化,沒有行數(shù),程序較為復(fù)雜的時(shí)候,就無法定位,所以進(jìn)一步定位。
??本篇做了qBreakpad的研究,但是沒有成功,過程也還是填出來,后來突然注意到gdb出現(xiàn)行數(shù)的方法,并通過了幾輪測試以及實(shí)戰(zhàn),確實(shí)可以定位到行數(shù),所以為了大家方便,把國企麒麟上的Qt崩潰方法分享出來。
??本篇文章比較長,就不分篇了,同時(shí)還做了專項(xiàng)測試。

注意

??閱讀者如果一開始有點(diǎn)懵,可能先要看先大致掃一下:《麒麟系統(tǒng)開發(fā)筆記(十):在國產(chǎn)麒麟系統(tǒng)上使用gdb定位崩潰異常方法流程以及測試Demo》,本篇也是解決上一篇探討的遺留問題(只定位了函數(shù),未定位代碼行號(hào))。

使用gdb定位Qt的release(國產(chǎn)麒麟系統(tǒng))

步驟一:修改上一篇demo的pro配置

??(這里是上一篇的demo,只關(guān)注紅框的即可)
??

步驟二:重新編譯調(diào)試還是沒有行號(hào)

???

??

??

??與沒有-g的時(shí)候沒有啥區(qū)別。

步驟三:多加幾層調(diào)用追加堆棧測試

??修改下代碼:
??

??

??測試:
??

??還是沒有堆棧信息:
??

步驟四:懷疑是release版本,改為debug測試

??改為debug版本,也沒有:
??

??不清楚原因,這里博主就沒有深究了

步驟五:路回峰轉(zhuǎn),重啟gdb,成功定位

??研究qBreakpad去了,但是qBreakpad也入深坑了,在爬坑的時(shí)候,突然注意到gdb的bt指令,所以研究了個(gè)把小時(shí)qBreakpad又折回來繼續(xù)了。
??


??至此,出現(xiàn)了行號(hào):
??

配置調(diào)試發(fā)布專項(xiàng)測試

??為了確認(rèn)最簡單的方式,所以進(jìn)行測試:

DEFINES += QT_NO_DEBUG_OUTPUT DEFINES += QT_NO_WARN_OUTPUT QMAKE_CXXFLAGS += -g #QMAKE_CXXFLAGS += -g3

測試:debug版本,無-g,不屏蔽qt打印輸出

??

測試:debug版本,有-g的,不屏蔽qt打印輸出

??

??有行號(hào),行號(hào)跟函數(shù)在同一行。

測試:debug版本,有-g的,屏蔽qt打印輸出

??

??有行號(hào),行號(hào)跟函數(shù)在同一行。

測試:release版本,有-g/-g3,有qt屏蔽打印輸出

#DEFINES += QT_NO_DEBUG_OUTPUT#DEFINES += QT_NO_WARN_OUTPUTQMAKE_CXXFLAGS += -g #QMAKE_CXXFLAGS += -g3

??

??

??

??還試了下-g3:
??

??定位了函數(shù),不定位行號(hào)。

測試:release版本,有-g/-g3,未屏蔽qt打印輸出

??

??所以,最終發(fā)現(xiàn)是不能屏蔽qt打印輸出的,不然是沒有的,跟release或者debug沒有關(guān)系(沒有去論證debug下屏蔽qt打印輸出了)

測試:release版本,無-g,未屏蔽qt打印輸出

??

??所以,無-g也不行

模擬實(shí)戰(zhàn)

??先加了一句代碼:
??

??取消屏蔽qt打印,加上-g:
??

??使用release編譯后,運(yùn)行崩潰:
??

??定位coredump文件:
??

??然后使用gdb的方法:
??


??這里得行是qlist.h的行號(hào),不是我們代碼的行號(hào),所以下標(biāo)錯(cuò)誤估計(jì)就這樣了??梢耘袛喑?,越界也是最后某個(gè)地方調(diào)用指針導(dǎo)致錯(cuò)誤,所以越界當(dāng)時(shí)是不會(huì)有問題,當(dāng)越界在用越界調(diào)用的就把出錯(cuò)的指針調(diào)用出行數(shù)打出來。
??下面試試指針錯(cuò)誤:
??

專項(xiàng)測試結(jié)論

??

入坑

入坑一:gdb不出現(xiàn)行數(shù)

問題

??Gdb調(diào)試不出現(xiàn)行數(shù)

原因

  • 原因1:release與debug問題

  • 原因2:-g問題

  • 原因3:是否屏蔽qt打印問題
    ??1+2+3,導(dǎo)致情況多種,花了不少時(shí)間定位

解決

??進(jìn)行了專項(xiàng)測試論證,查看“專項(xiàng)測試論證”。

qBreakpad(此方法未通,貼出來參考,有興趣的讀者可以繼續(xù)往下走)

??qBreakpad下載地址:https://github.com/buzzySmile/qBreakpad

git clone --recursive https://github.com/buzzySmile/qBreakpad.git

??好像下下來有點(diǎn)問題,最后還是手動(dòng)下載zip包了:
??

??qBreakpad依賴breakpad和lss
???

??下不下來,另外找把

??breakpad下載地址:https://github.com/google/breakpad

??(最新版報(bào)錯(cuò)),下載v2021.08.09版本

??

??lss:https://github.com/ithaibo/linux-syscall-support
??下載來:

編譯qBreakpad庫

步驟一:下載解壓

??

步驟二:復(fù)制改名依賴庫

??復(fù)制過去并改名:
??

??改完后(先刪除已經(jīng)存在的):
??

步驟三:使用qtcreator打開qBreakpad編譯

??

步驟四:解決錯(cuò)誤“undefined reference to `google_breakpad::PEFile::TryGetDebugInfo(xxxx”,繼續(xù)編譯

??懷疑是版本問題,降低版本試試:
??

??如下,下載解壓后替換:
??

步驟五:解決錯(cuò)誤“*** No rule to make target ‘xxx/minidump_file_writer.cc’, needed by ‘_build/obj/minidump_file_writer.o’. Stop.”

??“*** No rule to make target ‘…/…/qBreakpad-master/third_party/breakpad/src/client/minidump_file_writer.cc’, needed by ‘_build/obj/minidump_file_writer.o’. Stop.”
??
??那豈不是要降低qBreakpad的版本?試一試
??至此,突然發(fā)現(xiàn)gdb的bt,所以這邊停止了。


麒麟系統(tǒng)開發(fā)筆記(十一):在國產(chǎn)麒麟系統(tǒng)上使用gdb定位崩潰異常方法流程進(jìn)階定位代的評(píng)論 (共 條)

分享到微博請遵守國家法律
鄢陵县| 苏州市| 定远县| 中江县| 泽普县| 沅陵县| 延吉市| 区。| 务川| 甘德县| 固阳县| 洪洞县| 广昌县| 万山特区| 巴林右旗| 锦屏县| 通辽市| 东莞市| 清镇市| 霞浦县| 建湖县| 孟连| 新平| 香河县| 乾安县| 桃江县| 巴南区| 子长县| 石门县| 汝城县| 宜章县| 西乡县| 潼南县| 枣强县| 北安市| 历史| 黎城县| 武山县| 兴仁县| 保康县| 买车|