【C++精選】lldb 調(diào)試指南

1.查看coredump

  • coredump的保存地址
cat /proc/sys/kernel/core_pattern
/var/log/coredump/core-%t-%u-%e-%p

  • 查看coredump文件的內(nèi)容
cd /var/log/coredump
ll
-rw------- 1 root root   92G Mar 29 17:01 'core-1711702889-0-Executor task l-866955'
-rw------- 1 root root   87G Mar 29 17:23 'core-1711704230-0-Executor task l-2208190'
-rw------- 1 root root   86G Mar 30 16:26 'core-1711787213-0-Executor task l-3955961'
-rw-r--r-- 1 root root  405K Mar 23 14:55  hs_err_pid1391445.log

$lldb -d core-1711787213-0-Executor task l-3955961
(lldb) target create --core "core-1711787213-0-Executor task l-3955961"

Core file '/var/log/coredump/core-1711787213-0-Executor task l-3955961' (aarch64) was loaded.
(lldb)
Core file '/var/log/coredump/core-1711787213-0-Executor task l-3955961' (aarch64) was loaded.
(lldb) bt
* thread #1, name = 'java', stop reason = signal SIGSEGV
  * frame #0: 0x0000fff7aca2f88c libxxx-xxx-operator-1.4.0-aarch64.so`int xxx::op::OperatorUtil::CompareFlatTemplate<long, true, false, true>(leftVector=0x0000fff8402804e0, leftPosition=59372, rightVector=0x0000fff8402804e0, rightPosition=59405) + 264
    frame #1: 0x0000fff7aca308b4 libxxx-xxx-operator-1.4.0-aarch64.so`xxx::op::SortMergeJoinScanner::CompareStreamedRowKeys(this=0x0000fff84001a4a0, leftRowIndex=34359797740, rightRowIndex=34359797773) + 444
    frame #2: 0x0000fff7aca2d928 libxxx-xxx-operator-1.4.0-aarch64.so`xxx::op::SortMergeJoinScanner::PreKeyMatched(this=0x0000fff84001a4a0) + 148

2.斷點(diǎn)調(diào)試

2.1 編譯選項(xiàng)添加調(diào)試信息

編譯程序時(shí)需要添加調(diào)試信息,可以使用 -g 參數(shù)來(lái)生成調(diào)試符號(hào)潜的。例如:

clang++ -g -o program program.cpp

2.2 attach到目標(biāo)進(jìn)程并設(shè)置斷點(diǎn)調(diào)試

  • 1.使用 LLDB 調(diào)試程序時(shí),可以通過(guò)以下命令啟動(dòng) LLDB 并附加到目標(biāo)進(jìn)程
lldb attach -p <PID>
  • 2.在 LLDB 中設(shè)置斷點(diǎn)有多種方式
#查看全部斷點(diǎn)
(lldb) breakpoint list

#刪除全部斷點(diǎn)
(lldb) breakpoint delete
#刪除指定斷點(diǎn)
(lldb) breakpoint delete <斷點(diǎn)編號(hào)>

#跳過(guò)系統(tǒng)斷點(diǎn):
(lldb) process handle SIGSEGV SIGILL -n false
(lldb) process handle SIGSEGV SIGILL -s false

#設(shè)置條件斷點(diǎn)(將會(huì)非常耗時(shí)导披,將會(huì)使得進(jìn)程運(yùn)行速度被拖慢至少一倍)
(lldb) breakpoint set --address 0xfff51302d3c4 -c "rowIndex == 2154222"

#設(shè)置斷點(diǎn)
(lldb) breakpoint set --file functionA.cpp --line 10
(lldb) breakpoint set --name <函數(shù)名>
(lldb) breakpoint set --address 0xfff51302d3c4
(lldb) breakpoint set --file functionA.cpp --name <函數(shù)名>
#忽略斷點(diǎn)(1000次):
(lldb) breakpoint set --name <函數(shù)名> -i 1000


#進(jìn)階:
#(1)設(shè)置值
(lldb) expr dynamic_cast<xxx::type::DecimalDataType*>(inputDataTypes[i].get())
#(2)獲取指針的內(nèi)容
(lldb) p streamedPagesIndex->columnsDeque
(std::  1::vector<xxx::vec::BaseVector **,  std::   1::allocator<xxx::vec::BaseVe
ctor **>     >) $1 = size=1 {
= [0]   0x0000fff744447f50
}
(lldb) x/a 0x0000fff744447f50
0xfff744447f50: 0x0000fff744416f00
#(3)設(shè)置硬件斷點(diǎn)
(lldb) watchpoint set expression 0x0000fff884022598

2.3 查看目標(biāo)函數(shù)的符號(hào)詳情

#image lookup -n <函數(shù)名>
(lldb) image lookup -n CompareStreamedRowKeys
1 match found in /home/omni/static_lib_0326_debug_bak/lib/libxxx-xxx-operator-1.4.0-aarch64.so:
        Address: libxxx-xxx-operator-1.4.0-aarch64.so[0x00000000005006f8] (libxxx-xxx-operator-1.4.0-aarch64.so.PT_LOAD[0]..text + 3772168)
        Summary: libxxx-xxx-operator-1.4.0-aarch64.so`xxx::op::SortMergeJoinScanner::CompareStreamedRowKeys(long, long)

2.4 反編譯目標(biāo)函數(shù)

#disassemble -n <函數(shù)名>
(lldb) disassemble -n CompareStreamedRowKeys
libxxx-xxx-operator-1.4.0-aarch64.so`xxx::op::SortMergeJoinScanner::CompareStreamedRowKeys:
    0xfff7aca306f8 <+0>:   sub    sp, sp, #0xb0             ; =0xb0
    ...忽略
    0xfff7aca307bc <+196>: ldr    x8, [x8]
    0xfff7aca307c0 <+200>: add    x0, x8, #0x28             ; =0x28
    0xfff7aca307c4 <+204>: ldursw x1, [x29, #-0xc]
    0xfff7aca307c8 <+208>: bl     0xfff7aca26e84            ; std::__1::vector<xxx::vec::BaseVector**, std::__1::allocator<xxx::vec::BaseVector**> >::operator[][abi:v15000](unsigned long) const
    0xfff7aca307cc <+212>: ldr    x8, [sp, #0x8]
    ...忽略
    0xfff7aca307fc <+260>: add    x0, x8, #0x28             ; =0x28
    0xfff7aca30800 <+264>: ldursw x1, [x29, #-0x1c]
    0xfff7aca30804 <+268>: bl     0xfff7aca26e84            ; std::__1::vector<xxx::vec::BaseVector**, std::__1::allocator<xxx::vec::BaseVector**> >::operator[][abi:v15000](unsigned long) const

3.實(shí)戰(zhàn)

記一次靜態(tài)庫(kù)定位棧溢出問(wèn)題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞳步,隨后出現(xiàn)的幾起案子抠璃,更是在濱河造成了極大的恐慌术奖,老刑警劉巖礁遵,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異采记,居然都是意外死亡佣耐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)唧龄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)兼砖,“玉大人,你說(shuō)我怎么就攤上這事选侨∫从悖” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵援制,是天一觀的道長(zhǎng)戏挡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晨仑,這世上最難降的妖魔是什么褐墅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任拆檬,我火速辦了婚禮,結(jié)果婚禮上妥凳,老公的妹妹穿的比我還像新娘竟贯。我一直安慰自己,他們只是感情好逝钥,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布屑那。 她就那樣靜靜地躺著,像睡著了一般艘款。 火紅的嫁衣襯著肌膚如雪持际。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天哗咆,我揣著相機(jī)與錄音蜘欲,去河邊找鬼。 笑死晌柬,一個(gè)胖子當(dāng)著我的面吹牛姥份,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播年碘,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼澈歉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了屿衅?” 一聲冷哼從身側(cè)響起闷祥,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎傲诵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體箱硕,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拴竹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剧罩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栓拜。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惠昔,靈堂內(nèi)的尸體忽然破棺而出幕与,到底是詐尸還是另有隱情,我是刑警寧澤镇防,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布啦鸣,位于F島的核電站,受9級(jí)特大地震影響来氧,放射性物質(zhì)發(fā)生泄漏诫给。R本人自食惡果不足惜香拉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望中狂。 院中可真熱鬧凫碌,春花似錦、人聲如沸胃榕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)勋又。三九已至苦掘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赐写,已是汗流浹背鸟蜡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挺邀,地道東北人揉忘。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像端铛,于是被迫代替她去往敵國(guó)和親泣矛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容