柚子快報(bào)邀請碼778899分享:dump分析方法
柚子快報(bào)邀請碼778899分享:dump分析方法
一、關(guān)于dump
1、什么是dump
在計(jì)算機(jī)領(lǐng)域中,術(shù)語“dump”通常用來指代將某種數(shù)據(jù)以某種格式進(jìn)行轉(zhuǎn)儲(chǔ)或?qū)С龅倪^程。這個(gè)術(shù)語可以用于多種不同的上下文,下面是一些常見的情況:
內(nèi)存轉(zhuǎn)儲(chǔ)(Memory Dump):在計(jì)算機(jī)系統(tǒng)崩潰或發(fā)生故障時(shí),操作系統(tǒng)可能會(huì)將系統(tǒng)的內(nèi)存內(nèi)容轉(zhuǎn)儲(chǔ)到磁盤上,以便后續(xù)分析。這樣的轉(zhuǎn)儲(chǔ)文件通常被稱為“內(nèi)存轉(zhuǎn)儲(chǔ)”或“核心轉(zhuǎn)儲(chǔ)”,它包含了在系統(tǒng)崩潰時(shí)內(nèi)存中的數(shù)據(jù)和狀態(tài)信息。
數(shù)據(jù)轉(zhuǎn)儲(chǔ)(Data Dump):在軟件開發(fā)或調(diào)試過程中,程序員可能會(huì)將某些數(shù)據(jù)以某種格式導(dǎo)出到文件中,以便進(jìn)行分析或調(diào)試。這樣的數(shù)據(jù)轉(zhuǎn)儲(chǔ)文件通常包含程序執(zhí)行期間的變量、對象、數(shù)據(jù)結(jié)構(gòu)等信息,有助于診斷問題或理解程序行為。
數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)(Database Dump):在數(shù)據(jù)庫管理系統(tǒng)中,數(shù)據(jù)庫管理員可以將數(shù)據(jù)庫中的數(shù)據(jù)和結(jié)構(gòu)以某種格式導(dǎo)出到文件中,這樣的文件通常被稱為“數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)”或“數(shù)據(jù)庫備份”。數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)可以用于數(shù)據(jù)遷移、備份恢復(fù)、數(shù)據(jù)分析等目的。
總的來說,“dump”指的是將數(shù)據(jù)以某種格式轉(zhuǎn)儲(chǔ)或?qū)С龅轿募械倪^程,這樣的文件可以用于后續(xù)分析、調(diào)試、恢復(fù)或備份。
2、為什么使用dump
使用"dump"的主要目的是將數(shù)據(jù)以某種格式轉(zhuǎn)儲(chǔ)或?qū)С龅轿募?,以便后續(xù)分析、調(diào)試、備份、恢復(fù)或共享。以下是一些常見的情況,可以說明為什么要使用"dump":
數(shù)據(jù)備份和恢復(fù):將數(shù)據(jù)庫、文件系統(tǒng)或其他重要數(shù)據(jù)轉(zhuǎn)儲(chǔ)到文件中,以便在發(fā)生故障或數(shù)據(jù)丟失時(shí)進(jìn)行恢復(fù)。這樣的轉(zhuǎn)儲(chǔ)文件可以作為備份,用于恢復(fù)丟失的數(shù)據(jù)。
調(diào)試和故障排除:在軟件開發(fā)過程中,將程序中的特定數(shù)據(jù)、變量、對象或內(nèi)存內(nèi)容轉(zhuǎn)儲(chǔ)到文件中,以便進(jìn)行調(diào)試和故障排除。這樣的轉(zhuǎn)儲(chǔ)文件可以幫助程序員理解程序執(zhí)行期間的狀態(tài)和行為,找出問題的根本原因。
系統(tǒng)分析和優(yōu)化:將系統(tǒng)內(nèi)存、網(wǎng)絡(luò)通信、數(shù)據(jù)庫操作等關(guān)鍵數(shù)據(jù)轉(zhuǎn)儲(chǔ)到文件中,以便進(jìn)行系統(tǒng)性能分析和優(yōu)化。這樣的轉(zhuǎn)儲(chǔ)文件可以幫助系統(tǒng)管理員了解系統(tǒng)的運(yùn)行狀況,找出性能瓶頸并采取相應(yīng)的優(yōu)化措施。
數(shù)據(jù)分析和報(bào)告:將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到文件中,以便進(jìn)行數(shù)據(jù)分析、生成報(bào)告、制作圖表或與其他系統(tǒng)共享數(shù)據(jù)。這樣的轉(zhuǎn)儲(chǔ)文件可以作為數(shù)據(jù)分析的基礎(chǔ),幫助用戶理解數(shù)據(jù)、發(fā)現(xiàn)趨勢和模式,并做出決策。
總的來說,使用"dump"可以將重要的數(shù)據(jù)以文件的形式保存下來,從而使其在需要時(shí)可以方便地進(jìn)行處理、分析、備份或共享。這有助于提高系統(tǒng)的可靠性、可維護(hù)性和可用性,并為后續(xù)工作提供了有價(jià)值的數(shù)據(jù)支持。
3、怎么使用dump
使用"dump"通常是通過編程來實(shí)現(xiàn)的,具體步驟取決于要轉(zhuǎn)儲(chǔ)的數(shù)據(jù)類型和目的地。下面是一些常見情況下的示例:
數(shù)據(jù)庫轉(zhuǎn)儲(chǔ):對于關(guān)系型數(shù)據(jù)庫,可以使用數(shù)據(jù)庫管理系統(tǒng)提供的工具(如mysqldump、pg_dump等)來將數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)為SQL腳本或其他格式的文件。對于NoSQL數(shù)據(jù)庫,通常有相應(yīng)的命令或API來導(dǎo)出數(shù)據(jù),例如MongoDB可以使用mongoexport命令來導(dǎo)出數(shù)據(jù)。
內(nèi)存轉(zhuǎn)儲(chǔ):在編程中,可以使用相應(yīng)語言或框架提供的功能來將內(nèi)存中的數(shù)據(jù)寫入文件中。例如,在Python中,可以使用pickle模塊將對象序列化為字節(jié)流,并將其寫入文件;或者使用json模塊將數(shù)據(jù)轉(zhuǎn)換為JSON格式并寫入文件。
程序數(shù)據(jù)轉(zhuǎn)儲(chǔ):在程序中,可以編寫代碼將特定的數(shù)據(jù)或狀態(tài)轉(zhuǎn)儲(chǔ)到文件中,以便后續(xù)分析或調(diào)試。這通常涉及將數(shù)據(jù)寫入到文件,例如文本文件、CSV文件、JSON文件等。在調(diào)試工具中,可以使用工具提供的功能將內(nèi)存中的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到文件中,以便進(jìn)行調(diào)試。例如,在GDB中,可以使用dump memory命令將內(nèi)存內(nèi)容轉(zhuǎn)儲(chǔ)到文件中。
網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)儲(chǔ):在網(wǎng)絡(luò)監(jiān)控或分析工具中,可以設(shè)置抓包規(guī)則來捕獲網(wǎng)絡(luò)通信數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)儲(chǔ)到文件中。這樣的文件可以用于網(wǎng)絡(luò)分析、故障排除、安全審計(jì)等目的。
總的來說,使用"dump"是通過編程或使用相應(yīng)工具來實(shí)現(xiàn)的,具體步驟和方法取決于要轉(zhuǎn)儲(chǔ)的數(shù)據(jù)類型、轉(zhuǎn)儲(chǔ)的目的和使用的技術(shù)棧。在編程中,您通常需要將數(shù)據(jù)寫入文件,并選擇合適的格式和編碼來保存數(shù)據(jù)。
二、實(shí)戰(zhàn)演練
1、Linux 的 qt 的minidump解析
(1)關(guān)于minidump
跨平臺(tái)的Qt程序崩潰生成Dump文件Breakpad_dump_syms-CSDN博客
(2)解析步驟
①使用交叉編譯
breakpad
工程
得到的
dump_syms
、
minidump_stackwalk
工具進(jìn)行
dump
文件解析,并且需要在Linux上進(jìn)行解析
②生成符號文件
軟件發(fā)布者提供對應(yīng)版本的未壓縮的軟件,假設(shè)軟件名為mysoft,則指令為
./dump_syms mysoft > mysoft.sym
③設(shè)置符號文件存儲(chǔ)目錄
在程序所在目錄下創(chuàng)建
symbols
目錄,并繼續(xù)創(chuàng)建如下的目錄結(jié)構(gòu):
第一級目錄,固定為
symbols
;
第二級目錄,為即將放入的符號文件名稱,如
mysoft.sym,則目錄名為 mysoft;
第三級目錄,在
sym
文件中第一行內(nèi)容,有一串
16
進(jìn)制編號,將其作為目錄名。
建立好以上路徑后,將
mysoft.sym 移動(dòng)到該路徑下。
④使用
minidump_stackwalk
工具將
dmp
文件與
sym
文件作為輸入得到解析文件
?
./minidump_stackwalk ./crashes/4d4a1b85-ef45-49f4-e49e799f-090114c2.dmp ./symbols >
dump1.txt
?即Debug過后的相關(guān)信息存放在dump1.txt。
2、win 的 qt 的dump解析
可借助WinDbg工具實(shí)現(xiàn)解析。
?
輸入指令回車即可,指令內(nèi)容為:
!analyze -v; kp
3、linux 的 coredump解析(方式一)
(1)前置條件
假設(shè)應(yīng)用程序是在設(shè)備(俗稱板子)上運(yùn)行的
需要提供一個(gè)應(yīng)用程序的解析程序
需要提供一個(gè)編譯工具鏈?zhǔn)菇馕龀绦蛏蓀db文件
需要提供一個(gè)應(yīng)用程序崩潰生成的coredump文件
需要一個(gè)Ubuntu環(huán)境(假設(shè)板子上空間不夠或沒有 $GDB 命令)
(2)環(huán)境搭建與解析步驟
cd /opt
# 將編譯鏈復(fù)制到/opt下并解壓,假設(shè)編譯鏈文件夾為imx8mp-toolchain
mkdir temp
# 配置解析環(huán)境:將設(shè)備上 /lib 、 /usr/lib 兩個(gè)文件夾及其內(nèi)容復(fù)制到temp中
# 將解析程序 test000 復(fù)制到temp中
# 將coredump崩潰文件復(fù)制到temp中,如文件名為corefile
cd temp
chmod 777 test000
chmod 777 corefile
/opt/imx8mp-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-objcopy --only-keep-debug ./test000 ./test000.dbg
# source 編譯鏈環(huán)境配置腳本,如平臺(tái)1:
source /opt/imx8mp-toolchain/environment-setup-cortexa53-crypto-poky-linux
# 如平臺(tái)2:
# source /opt/myir-imx-xwayland/4.14-sumo/environment-setup-aarch64-poky-linux
# gdb ./test000 ./corefile
$GDB ./test000 ./corefile
symbol-file test000.dbg
y
bt
q
?
這段命令是使用 GDB 調(diào)試器進(jìn)行調(diào)試的命令行指令,其中包含了多個(gè)參數(shù)和選項(xiàng),具體含義如下:
$GDB: 啟動(dòng) GDB 調(diào)試器。file ./test000: 指定要調(diào)試的可執(zhí)行文件為 test000。core-file ./corefile: 指定要調(diào)試的核心轉(zhuǎn)儲(chǔ)文件為 corefile,用于分析程序崩潰時(shí)的內(nèi)存狀態(tài)。symbol-file test000.dbg: 指定用于調(diào)試的符號文件為 test000.dbg,這個(gè)文件通常包含了可執(zhí)行文件的調(diào)試符號信息,可以幫助在調(diào)試過程中定位到源代碼的行號。y: 回答 GDB 的詢問,通常是表示“yes”。bt: 執(zhí)行 backtrace 命令,用于打印函數(shù)調(diào)用堆棧信息。q: 執(zhí)行 quit 命令,退出 GDB 調(diào)試器。
這個(gè)命令的作用是在 GDB 中自動(dòng)執(zhí)行一系列命令,其中包括指定要調(diào)試的可執(zhí)行文件、核心轉(zhuǎn)儲(chǔ)文件、符號文件,并自動(dòng)回答 GDB 的詢問,最后打印函數(shù)調(diào)用堆棧信息并退出 GDB。
(3) 注意事項(xiàng)
不要配置LD_LIBRARY_PATH,如果配置了,會(huì)在source提示你卸載,然后再source一下,否則?$GDB ./test000 ./corefile 無法運(yùn)行
$GDB與gdb是不一樣的,前者沒有安裝gdb也能解析coredump
4、linux 的 coredump解析(方式二)
設(shè)置工作空間為plus,工具鏈imx8mp-toolchain放這里面,接著創(chuàng)建臨時(shí)目錄如./sysroot,把設(shè)備上的/usr/lib和/lib文件夾完整地復(fù)制進(jìn)去;把設(shè)備上的test000(非上面的應(yīng)用程序的解析程序,直接為應(yīng)用程序)放在sysroot目錄下的/usr/bin中。
cd /data/core_debug/plus
chmod 777 ./*
mkdir -p /data/core_debug/plus/sysroot/usr/bin
cp test000 /usr/bin
/data/core_debug/imx8mp-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-objcopy --add-gnu-debuglink test000.dbg test000
/data/core_debug/imx8mp-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gdb
set sysroot ./sysroot
file test000
core-file corefile
c
bt full
c
q
這段命令是關(guān)于使用GNU工具鏈中的aarch64-poky-linux-objcopy和aarch64-poky-linux-gdb進(jìn)行目標(biāo)文件和調(diào)試文件的處理以及調(diào)試的過程。
/data/core_debug/imx8mp-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-objcopy --add-gnu-debuglink test000.dbg test000:
這個(gè)命令使用aarch64-poky-linux-objcopy工具,將調(diào)試信息文件test000.dbg添加到目標(biāo)文件test000中,以創(chuàng)建一個(gè)帶有調(diào)試信息的新目標(biāo)文件。
/data/core_debug/imx8mp-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gdb:這個(gè)命令啟動(dòng)了aarch64-poky-linux-gdb調(diào)試器,它是用于處理和調(diào)試ARM架構(gòu)的程序的GNU調(diào)試器。
set sysroot ./sysroot:這個(gè)命令設(shè)置調(diào)試器的系統(tǒng)根目錄為./sysroot,這個(gè)目錄可能包含與目標(biāo)平臺(tái)相關(guān)的庫和頭文件。
file test000:這個(gè)命令告訴調(diào)試器要調(diào)試的程序是test000,它將加載并準(zhǔn)備該程序以進(jìn)行調(diào)試。
core-file corefile:這個(gè)命令告訴調(diào)試器要加載的核心轉(zhuǎn)儲(chǔ)文件是corefile,核心轉(zhuǎn)儲(chǔ)文件通常包含程序崩潰時(shí)的內(nèi)存映像,用于進(jìn)行后續(xù)的調(diào)試分析。
c:這個(gè)命令讓調(diào)試器繼續(xù)執(zhí)行程序,即從當(dāng)前斷點(diǎn)或程序計(jì)數(shù)器指示的位置開始執(zhí)行。
bt full:這個(gè)命令告訴調(diào)試器打印當(dāng)前調(diào)用棧的完整信息,包括函數(shù)名稱、文件名、行號等。
c:這個(gè)命令再次讓程序繼續(xù)執(zhí)行。
q:這個(gè)命令退出調(diào)試器。
/data/core_debug/imx8mp-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gdb后面的指令,可以合起來執(zhí)行:
/data/core_debug/imx8mp-toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gdb -ex 'set sysroot ./sysroot' -ex 'file test000' -ex 'core-file corefile' -ex 'c' -ex 'bt full' -ex 'c' -ex 'q' -batch
柚子快報(bào)邀請碼778899分享:dump分析方法
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。