成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Xcode斷點(diǎn)調(diào)試之變量概覽 - summary

移動(dòng)開發(fā) iOS
在Xcode中斷點(diǎn)調(diào)試時(shí),鼠標(biāo)停留在變量上,就能看到變量的信息。但對于自定義對象,通常Xcode提供的直接信息非常有限。

問題描述

在Xcode中斷點(diǎn)調(diào)試時(shí),鼠標(biāo)停留在變量上,就能看到變量的信息。但對于自定義對象,通常Xcode提供的直接信息非常有限,像這樣

請輸入圖片描述

想要了解這個(gè)對象具體的內(nèi)容,需要展開左邊的箭頭

請輸入圖片描述

當(dāng)開發(fā)者想要知道該對象具體某個(gè)成員(很可能也是一個(gè)對象,即對象的成員的成員.....)的值時(shí),就不得不反復(fù)展開多個(gè)箭頭,平添了不少debug時(shí)的焦躁=。=

解決方案

其實(shí)LLDB的設(shè)計(jì)者并非沒有考慮到這種情況,他們設(shè)計(jì)了一種機(jī)制,允許在浮動(dòng)窗口和變量窗口中顯示自定義類型對象的概覽,稱之為summary。

沒錯(cuò),就是浮動(dòng)窗口上***一行顯示的summary,我們再看一次

請輸入圖片描述

Summary的原理很簡單,就是保存一個(gè)"對象類型->概覽"的映射表,在調(diào)試時(shí)查表進(jìn)行顯示。在console中輸入

  1. type summary list 

可以查看當(dāng)前LLDB支持的所有語言/平臺(tái)的所有類型的summary,比如OC下的NSArray

  1. type summary list NSArray 

輸出的結(jié)果里,可以找到

請輸入圖片描述

和平常使用過程中的情況一致。

LLDB支持為自定義類型添加summary。

解決示例

直觀起見,這里將寫一個(gè)簡單的對象并為之添加summary,下面請演員入場

  1. @interface Rectangle : NSObject 
  2.     NSInteger _width; 
  3.     NSInteger _height; 
  4.  
  5. @property (nonatomic, assign) NSInteger width; 
  6. @property (nonatomic, assign) NSInteger height; 
  7.  
  8. @end 

對于這個(gè)矩形類的實(shí)例,我希望能夠直接看到它的面積。

Summary可以簡單地設(shè)置對象的概覽為靜態(tài)字符串,也可以設(shè)置為動(dòng)態(tài)的如正則表達(dá)式,甚至可以設(shè)置為Python function(事實(shí)上LLDB就是使用了Python作為映射的)。

在這里,嗯。。。。。Python,就決定是你啦!

請輸入圖片描述

方便起見不直接在console里寫入,而是把function單獨(dú)放在一個(gè)文件里

  1. def Rectangle_summary (valobj,internal_dict):      
  2. height_val = valobj.GetChildMemberWithName('_height')      
  3. width_val = valobj.GetChildMemberWithName('_width')      
  4. height = height_val.GetValueAsUnsigned(0)      
  5. width = width_val.GetValueAsUnsigned(0)      
  6. area = height*width      
  7. return 'Area: ' + str(area) 

保存成summarys.py

保存起來而不是直接在console里寫,將來就可以方便地添加其他自定義類型的summary,也可以將這個(gè)文件和開發(fā)組的成員共享:)

接下來導(dǎo)入到LLDB中

  1. command script import /Users/XXX/Desktop/TypeSummaryTest/TypeSummaryTest/summarys.py 

P.S:這個(gè)命令目測只支持full path,請?jiān)试S我在這里可恥地匿了=。=

然后將導(dǎo)入的function指定為映射即可

  1. type summary add Rectangle -F summarys.Rectangle_summary 

這時(shí)再次查看變量,Summary已經(jīng)有內(nèi)容啦:)

請輸入圖片描述

[[117605]]

假如有多個(gè)自定義類型的summary,都可以如法炮制。進(jìn)一步地,可以讓Xcode自動(dòng)加載summary。首先,把加載function這步也寫入腳本

  1. import lldb 
  2.  
  3. def Rectangle_summary (valobj,internal_dict): 
  4.     height_val = valobj.GetChildMemberWithName('_height'
  5.     width_val = valobj.GetChildMemberWithName('_width'
  6.     height = height_val.GetValueAsUnsigned(0) 
  7.     width = width_val.GetValueAsUnsigned(0) 
  8.     area = height*width 
  9.     return 'Area: ' + str(area) 
  10.  
  11. def __lldb_init_module(debugger, dict): 
  12.     debugger.HandleCommand('type summary add Rectangle -F summarys.Rectangle_summary'

然后,讓Xcode在啟動(dòng)時(shí)自動(dòng)導(dǎo)入這個(gè)文件。在~/下新建一個(gè).lldbinit文件,并在其中寫入command script import來導(dǎo)入summary文件

  1. command script import /Users/XXX/Desktop/TypeSummaryTest/TypeSummaryTest/summarys.py 

.lldbinit這個(gè)技巧來自于Facebook的chisel,是一個(gè)FB擴(kuò)展的LLDB命令集

That's all for today, have fun~

[[117606]]

 

參考資料

LLDB Tutorial

LLDB Data Formatters

Advanced Debugging with LLDB

LLDB Python Reference

 

責(zé)任編輯:閆佳明 來源: blog.segmentfault
相關(guān)推薦

2013-04-18 09:55:56

iOS開發(fā)Xcode調(diào)試斷點(diǎn)

2021-04-19 20:36:06

存儲(chǔ)Rust變量

2011-07-26 14:31:47

XCode 調(diào)試 全局

2011-07-28 14:31:55

Xcode 調(diào)試 異常

2019-04-18 09:31:07

iOS項(xiàng)目開發(fā)斷點(diǎn)代碼

2011-10-08 14:09:27

JavaScript

2021-08-26 05:04:53

JavaScript調(diào)試技巧

2017-04-19 10:25:01

JS斷點(diǎn)調(diào)試

2011-07-26 14:44:53

調(diào)試 Xcode

2013-04-18 10:19:40

iOS開發(fā)Xcode調(diào)試

2009-07-14 11:34:42

MyEclipse斷點(diǎn)JavaScript

2015-07-30 12:41:13

斷點(diǎn)BreakPoint

2022-09-22 07:31:14

Java變量計(jì)算

2013-03-29 13:17:53

XCode調(diào)試技巧iOS開發(fā)

2012-05-21 10:13:05

XCode調(diào)試技巧

2009-12-07 10:37:48

PHP預(yù)定義變量數(shù)組

2023-10-30 23:38:03

Rust編程基礎(chǔ)

2011-08-05 11:03:53

Xcode 證書 調(diào)試

2011-07-19 16:34:01

Xcode 證書

2022-10-13 13:21:58

系統(tǒng)httpsCharles
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一区二区精品视频 | 羞羞视频在线网站观看 | 亚洲综合二区 | 九九九久久国产免费 | 国产视频在线一区二区 | 久久综合一区 | 日韩在线高清 | 日韩av在线免费 | 美女视频黄色片 | 日韩免费毛片视频 | 武道仙尊动漫在线观看 | 成人在线国产 | 亚洲 欧美 另类 综合 偷拍 | 成人免费淫片aa视频免费 | 国产精品一区二区三区在线 | 日本三级网址 | 99亚洲精品 | 国产成人精品亚洲日本在线观看 | 伊人91在线| 久久精品91久久久久久再现 | 9久9久 | 日韩成人免费视频 | 一区二区三区在线播放 | 99精品网 | 国产精品污www在线观看 | 麻豆成人在线视频 | 日韩在线中文字幕 | 国产中文在线 | 亚洲人成人一区二区在线观看 | 中文字幕亚洲视频 | 成人免费激情视频 | 九色网址 | 欧美日韩国产一区二区三区不卡 | 日韩毛片中文字幕 | 欧美不卡在线 | 国产一区不卡 | 99久久精品免费看国产小宝寻花 | 一区二区三区视频在线 | 日韩久草 | 成人国产在线视频 | 成人在线网 |