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