日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XCode调试器LLDB

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XCode调试器LLDB 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

與調試器共舞 - LLDB 的華爾茲

  • 你是否曾經苦惱于理解你的代碼,而去嘗試打印一個變量的值?
NSLog(@"%@", whatIsInsideThisThing);
  • 或者跳過一個函數調用來簡化程序的行為?
NSNumber *n = @7; // 實際應該調用這個函數:Foo();
  • 或者短路一個邏輯檢查?
if (1 || theBooleanAtStake) { ... }
  • 或者偽造一個函數實現?
int calculateTheTrickyValue {return 9;/*先這么著...*/ }
  • 并且每次必須重新編譯,從頭開始?

  • 構建軟件是復雜的,并且 Bug 總會出現。一個常見的修復周期就是修改代碼,編譯,重新運行,并且祈禱出現最好的結果。

  • 但是不一定要這么做。你可以使用調試器。而且即使你已經知道如何使用調試器檢查變量,它可以做的還有很多。

  • 這篇文章將試圖挑戰你對調試的認知,并詳細地解釋一些你可能還不了解的基本原理,然后展示一系列有趣的例子。現在就讓我們開始與調試器共舞一曲華爾茲,看看最后能達到怎樣的高度。

LLDB

  • LLDB 是一個有著 REPL 的特性和 C++ ,Python 插件的開源調試器。LLDB 綁定在 Xcode 內部,存在于主窗口底部的控制臺中。調試器允許你在程序運行的特定時暫停它,你可以查看變量的值,執行自定的指令,并且按照你所認為合適的步驟來操作程序的進展。(這里有一個關于調試器如何工作的總體的解釋。)

  • 你以前有可能已經使用過調試器,即使只是在 Xcode 的界面上加一些斷點。但是通過一些小的技巧,你就可以做一些非常酷的事情。GDB to LLDB 參考是一個非常好的調試器可用命令的總覽。你也可以安裝 Chisel,它是一個開源的 LLDB 插件合輯,這會使調試變得更加有趣。

  • 與此同時,讓我們以在調試器中打印變量來開始我們的旅程吧

基礎

  • 這里有一個簡單的小程序,它會打印一個字符串。注意斷點已經被加在第 8 行。斷點可以通過點擊 Xcode 的源碼窗口的側邊槽進行創建。

    • 程序會在這一行停止運行,并且控制臺會被打開,允許我們和調試器交互。那我們應該打些什么呢?

help

  • 最簡單命令是 help,它會列舉出所有的命令。如果你忘記了一個命令是做什么的,或者想知道更多的話,你可以通過 help command 來了解更多細節,例如 help print 或者 help thread。如果你甚至忘記了 help 命令是做什么的,你可以試試 help help。不過你如果知道這么做,那就說明你大概還沒有忘光這個命令。

print

  • 打印值很簡單;只要試試 print 命令:

  • LLDB 實際上會作前綴匹配。所以你也可以使用 prin,pri,或者 p。但你不能使用 pr,因為 LLDB 不能消除和 process 的歧義 (幸運的是 p 并沒有歧義)。

  • 你可能還注意到了,結果中有個 $0。實際上你可以使用它來指向這個結果。試試 print $0 + 7,你會看到 106。任何以美元符開頭的東西都是存在于 LLDB 的命名空間的,它們是為了幫助你進行調試而存在的。

expression

  • 如果想改變一個值怎么辦?你或許會猜 modify。其實這時候我們要用到的是 expression 這個方便的命令。

  • 這不僅會改變調試器中的值,實際上它改變了程序中的值。這時候繼續執行程序,將會打印 42 red balloons。神奇吧。

  • 注意,從現在開始,我們將會偷懶分別以 p 和 e 來代替 print 和 expression。

什么是 print 命令

  • 考慮一個有意思的表達式:p count = 18。如果我們運行這條命令,然后打印 count 的內容。我們將看到它的結果與 expression count = 18 一樣。和 expression 不同的是,print 命令不需要參數。比如 e -h +17 中,你很難區分到底是以 -h 為標識,僅僅執行 +17 呢,還是要計算 17 和 h 的差值。連字符號確實很讓人困惑,你或許得不到自己想要的結果。

  • 幸運的是,解決方案很簡單。用 -- 來表征標識的結束,以及輸入的開始。如果想要 -h 作為標識,就用 e -h -- +17,如果想計算它們的差值,就使用 e -- -h +17。因為一般來說不使用標識的情況比較多,所以 e -- 就有了一個簡寫的方式,那就是 print。

  • 輸入 help print,然后向下滾動,你會發現:

'print' is an abbreviation for 'expression --'. (print是 `expression --` 的縮寫)

打印對象

  • 嘗試輸入
p objects
  • 輸出會有點啰嗦
(NSString *) $7 = 0x0000000104da4040 @"red balloons"
  • 如果我們嘗試打印結構更復雜的對象,結果甚至會更糟
(lldb) p @[ @"foo", @"bar" ](NSArray *) $8 = 0x00007fdb9b71b3e0 @"2 objects"
  • 實際上,我們想看的是對象的 description 方法的結果。我么需要使用 -O (字母 O,而不是數字 0) 標志告訴 expression 命令以 對象 (Object) 的方式來打印結果。
(lldb) e -O -- $8 <__NSArrayI 0x7fdb9b71b3e0>(foo,bar )
  • 幸運的是,e -o -- 有也有個別名,那就是 po (print object 的縮寫),我們可以使用它來進行簡化:
(lldb) po $8 <__NSArrayI 0x7fdb9b71b3e0>(foo,bar ) (lldb) po @"lunar" lunar (lldb) p @"lunar" (NSString *) $13 = 0x00007fdb9d0003b0 @"lunar"

變量

  • 現在你已經可以打印對象和簡單類型,并且知道如何使用 expression 命令在調試器中修改它們了。現在讓我們使用一些變量來減少輸入量。就像你可以在 C 語言中用 int a = 0 來聲明一個變量一樣,你也可以在 LLDB 中做同樣的事情。不過為了能使用聲明的變量,變量必須以美元符開頭。
(lldb) e int $a = 2 (lldb) p $a * 19 38 (lldb) e NSArray *$array = @[ @"Saturday", @"Sunday", @"Monday" ] (lldb) p [$array count] 2 (lldb) po [[$array objectAtIndex:0] uppercaseString] SATURDAY (lldb) p [[$array objectAtIndex:$a] characterAtIndex:0] error: no known method '-characterAtIndex:'; cast the message send to the method's return type error: 1 errors parsing expression // 悲劇了,LLDB 無法確定涉及的類型 (譯者注:返回的類型)。這種事情常常發生,給個說明就好了:(lldb) p (char)[[$array objectAtIndex:$a] characterAtIndex:0] 'M' (lldb) p/d (char)[[$array objectAtIndex:$a] characterAtIndex:0] 77

轉載于:https://www.cnblogs.com/ShaoYinling/p/8459513.html

總結

以上是生活随笔為你收集整理的XCode调试器LLDB的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜激情一区 | 天堂中文视频在线 | av中文字幕免费 | 免费黄色美女网站 | 先锋影音色 | 日韩网站在线观看 | 国产黑人 | 伊人狠狠操 | 国产一级在线 | 成人hd| 国产美女极度色诱视频www | 免费色网 | 国产精在线 | h片免费观看 | 秋霞福利影院 | 精品人妻少妇AV无码专区 | 天天色天天插 | 永久免费av无码网站性色av | 国产91在线免费观看 | 乳色吐息在线观看 | 99久久99久久精品免费看蜜桃 | 男人和女人插插 | 777黄色| 欧美字幕 | 久久久久久久久久一区 | 精品一二三四 | 一区二区精品区 | 男人的天堂中文字幕 | 欧美日韩国产不卡 | 空姐吹箫视频大全 | 影音先锋亚洲天堂 | 伊人久久狼人 | 美女日日日 | 黄91在线观看 | 亚洲精品久久久中文字幕 | 国产黄色大片在线观看 | 成人aaa| 熟妇毛片 | 国产精品入口日韩视频大尺度 | 国产三级久久久久 | 97久久精品 | 色老太hd老太色hd | 亚洲91网| 中文在线不卡 | 精品一区二区三区在线免费观看 | 久久观看最新视频 | 18成人免费观看视频 | 好吊视频一区 | yjizz国产 | 国外精品视频 | 亚洲色图15p | 欧美激情一区二区三区 | 韩国一区在线 | 狠狠干影视| www.com亚洲 | 久草精品在线观看 | 精品美女一区 | 久久久中文网 | 日韩免费a | 黄色片在线观看视频 | 91精品久久久久久久 | 日韩欧美国产一区二区三区在线观看 | 精品一区二区久久久久久按摩 | 久久久剧场 | 久久久久不卡 | 亚洲福利在线观看 | 中文字幕18页 | 特黄aaaaaaa片免费视频 | 91青草视频| 精品亚洲国产成人av制服丝袜 | 日日干影院| 日韩精品一区二区电影 | 日韩乱码人妻无码中文字幕 | 亚洲欧洲一区 | 免费在线观看黄色 | 免费精品在线观看 | 久久婷色 | 欧美操大逼 | 青青草福利 | 欧美在线视频免费播放 | 中文字幕黑人 | 法国空姐在线观看完整版 | 日韩欧美自拍 | 精品中文在线 | 久久伊人亚洲 | videosex抽搐痉挛高潮 | 国产毛片久久久久久久 | 久久国产精品无码一区二区 | 中文字幕亚洲第一 | 久草国产视频 | 一级久久久久久 | 秋霞影院午夜 | 国产高清一区二区三区四区 | 黄色aa网站 | 在线观看一区二区三区四区 | 伊人国产一区 | 日韩欧美麻豆 | 久草老司机 | 99在线看 |