LLDB動態(tài)調(diào)試

進(jìn)入斷點模式

常用指令

  • 查看當(dāng)前斷點
breakpoint list / break l
當(dāng)前斷點
  • 通過方法名加斷點
breakpoint set --name getNum
  • 通過sel加斷點
breakpoint set --selector touchesBegan:withEvent:
  • 通過不完整的sel加斷點
breakpoint set --func-regex getNu
  • 刪除斷點
breakpoint delete 8
  • 斷點下一步執(zhí)行
    • continue(c) - 過掉這個斷點
    • step(s) - 往下執(zhí)行一步鄙信,遇到嵌套函數(shù)會進(jìn)入
    • next(n) - 往下執(zhí)行一步动漾,遇到嵌套函數(shù)直接執(zhí)行掉這個函數(shù)
  • 禁用斷點 & 啟動斷點
breakpoint disable 2  /  breakpoint dis 2
breakpoint enable 2
  • 執(zhí)行代碼expression / p
(lldb) p num
(NSInteger) $0 = 3
  • po 是 expression -O ( --object-description NSObject 的 description 方法 ) 的簡寫
(lldb) po num
3
  • 查看函數(shù)調(diào)用棧
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1
  * frame #0: 0x000000010f426710 LLDB調(diào)試`-[ViewController getNum](self=0x00007fd805d107d0, _cmd="getNum") at ViewController.m:29:13
    frame #1: 0x000000010f4266bb LLDB調(diào)試`-[ViewController touchesBegan:withEvent:](self=0x00007fd805d107d0, _cmd="touchesBegan:withEvent:", touches=1 element, event=0x0000600000d85320) at ViewController.m:24:21
  • 跳轉(zhuǎn)前一個/后一個方法怔接,up/down
(lldb) up
frame #1: 0x000000010f4266bb LLDB調(diào)試`-[ViewController touchesBegan:withEvent:](self=0x00007fd805d107d0, _cmd="touchesBegan:withEvent:", touches=1 element, event=0x0000600000d85320) at ViewController.m:24:21
   21   
   22   - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
   23       NSLog(@"我來了");
-> 24       NSInteger num = [self getNum];
                            ^
   25       NSLog(@"%ld", num);
   26   }
   27   
(lldb) down
frame #0: 0x000000010f426710 LLDB調(diào)試`-[ViewController getNum](self=0x00007fd805d107d0, _cmd="getNum") at ViewController.m:29:13
   26   }
   27   
   28   - (NSInteger)getNum {
-> 29       return  arc4random()%10+1;
                    ^
   30   }
   31   
   32   @end
  • 通過編號跳轉(zhuǎn)對應(yīng)方法
frame select 5
  • 查看方法參數(shù)
frame variable
  • 查看當(dāng)前加載的庫 image list
(lldb) image list
[  0] B9970493-7622-3728-A35A-BADBEAA5978D 0x0000000106935000 /Users/liumingfei/Library/Developer/Xcode/DerivedData/LLDB調(diào)試-dtexkkvfffircsgsiivncltrmcgy/Build/Products/Debug-iphonesimulator/LLDB調(diào)試.app/LLDB調(diào)試 
[  1] CE635DB2-D47E-3C05-A0A3-6BD982E7E750 0x0000000110338000 /usr/lib/dyld 
[  2] 528E1F55-F655-3533-99B9-7EAE1DAE5D07 0x000000010693f000 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/dyld_sim 
[  3] 30153EA5-45E2-334A-99DF-6E79D88AB4D0 0x0000000106c2b000 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/Foundation.framework/Foundation 
[  4] 83003EB9-EC0F-3743-871E-ED786CDAAFC7 0x0000000107207000 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libobjc.A.dylib 
[  5] 5D4D8F98-6E5B-31E1-94EA-3839C26E223F 0x0000000107b3d000 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libSystem.B.dylib 
  • 查看類的信息 image lookup -t 類名
(lldb) image lookup -t LObject
1 match found in /Users/liumingfei/Library/Developer/Xcode/DerivedData/LLDB調(diào)試-dtexkkvfffircsgsiivncltrmcgy/Build/Products/Debug-iphonesimulator/LLDB調(diào)試.app/LLDB調(diào)試:
id = {0x40000002b}, name = "LObject", byte-size = 24, decl = LObject.h:13, compiler_type = "@interface LObject : NSObject{
    NSString * _flag;
    NSInteger _tag;
}
@property ( getter = flag,setter = setFlag:,readwrite,copy,nonatomic ) NSString * flag;
@property ( getter = tag,setter = setTag:,assign,readwrite,nonatomic ) NSInteger tag;
@end"
  • 逆向常用指令
@interface LObject : NSObject

@property (nonatomic, copy) NSString *flag;
@property (nonatomic, assign) NSInteger tag;
- (void)lDescribtion;

@end

@interface ViewController ()
@property (nonatomic, retain) LObject *to;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.to = [[LObject alloc] init];
    self.to.tag = 22;
    self.to.flag = @"normal";
    NSLog(@"我來了");
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    self.to.flag = @"special";
}

@end

1.添加內(nèi)存斷點
在NSLog處加斷點橄浓,然后控制臺執(zhí)行指令watchpoint set variable self->_to->_flag

(lldb) watchpoint set variable self->_to->_flag
Watchpoint created: Watchpoint 1: addr = 0x6000018e7448 size = 8 state = enabled type = w
    watchpoint spec = 'self->_to->_flag'
    new value: 0x00000001016cc078
2020-03-26 10:17:21.657879+0800 LLDB調(diào)試[80028:2548356] 我來了

Watchpoint 1 hit:
old value: 0x00000001016cc078
new value: 0x00000001016cc0b8
(lldb) po 0x00000001016cc078
normal

(lldb) po 0x00000001016cc0b8
special
  1. 通過內(nèi)存地址添加斷點
    還是在NSLog處添加斷點演闭,然后獲取flag的內(nèi)存地址是尖,在通過watchpoint set expression下斷點
(lldb) p &self->_to->_flag
(NSString **) $0 = 0x0000600003da8328
(lldb) watchpoint set expression 0x0000600003da8328
Watchpoint created: Watchpoint 1: addr = 0x600003da8328 size = 8 state = enabled type = w
    new value: 4495532152
2020-03-26 10:31:12.151198+0800 LLDB調(diào)試[80318:2565697] 我來了

Watchpoint 1 hit:
old value: 4495532152
new value: 4495532216
(lldb) po 4495532152
normal

(lldb) po 4495532216
special

生活如此美好懒鉴,今天就點到為止拱燃。。腾它。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跑筝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瞒滴,更是在濱河造成了極大的恐慌曲梗,老刑警劉巖赞警,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虏两,居然都是意外死亡愧旦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門定罢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笤虫,“玉大人,你說我怎么就攤上這事祖凫∏眚牵” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵惠况,是天一觀的道長遭庶。 經(jīng)常有香客問我,道長售滤,這世上最難降的妖魔是什么罚拟? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮完箩,結(jié)果婚禮上赐俗,老公的妹妹穿的比我還像新娘。我一直安慰自己弊知,他們只是感情好阻逮,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秩彤,像睡著了一般叔扼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漫雷,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天瓜富,我揣著相機(jī)與錄音,去河邊找鬼降盹。 笑死与柑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓄坏。 我是一名探鬼主播价捧,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涡戳!你這毒婦竟也來了结蟋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤渔彰,失蹤者是張志新(化名)和其女友劉穎嵌屎,沒想到半個月后推正,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡宝惰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年舔稀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掌测。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖产园,靈堂內(nèi)的尸體忽然破棺而出汞斧,到底是詐尸還是另有隱情,我是刑警寧澤什燕,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布粘勒,位于F島的核電站,受9級特大地震影響屎即,放射性物質(zhì)發(fā)生泄漏庙睡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一技俐、第九天 我趴在偏房一處隱蔽的房頂上張望乘陪。 院中可真熱鬧,春花似錦雕擂、人聲如沸啡邑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谤逼。三九已至,卻和暖如春仇穗,著一層夾襖步出監(jiān)牢的瞬間流部,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工纹坐, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留枝冀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓恰画,卻偏偏與公主長得像宾茂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拴还,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

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