Hatena::ブログ(Diary)

Object for cutie

2012-09-23

Xcode5でLLDBデバッガコマンドを使ってみる

※キーウインドウ上の曖昧な制約を表示する、[UIWindow keyWindow] _autolayoutTrace]を追記

Xcodeのブレークポイントでプログラムを停止している時に入力できるコマンドです。

f:id:tanaponchikidun:20120923170008p:image


VisualStudioのイミディエイトウインドウライクに変数の値を変えられます。

値を変更して何度もテストしたい時に便利そうです。

f:id:tanaponchikidun:20120923165016p:image


・参考資料

WWDC 2012 Session VideosのDebugging with LLDB (https://developer.apple.com/videos/wwdc/2012/)※英語

GDBとLLDBのコマンド対応表 (http://lldb.llvm.org/lldb-gdb.html) ※英語,公式

チュートリアル等 (http://lldb.llvm.org/tutorial.html) ※英語,公式

変数のフォーマット (http://lldb.llvm.org/varformats.html) ※英語,公式

LLDBを使ってCUIで動作させているテストケースデバッグする。(http://akisute.com/2012/07/lldb-cui.html)


簡単なコマンド一覧表

省略形内容正式名
hヘルプの表示help
s ステップイン thread step-in
c 続きを実行(次のbreakPointまで) process continue
po式の評価(poはオブジェクト、pは基本型も可)expression -o --
br lbreakPointを一覧表示breakpoint list
bt現スレッドのバックトレース情報を表示thread backtrace
b objc_msgSend objc_msgSend関数にシンボリックブレークポイントを設定-


[使用例]

変数cellCountの値を変更する。

p cellCount = 6


・self.view.subViewsのカウントを一時変数fooに代入

p NSUInteger $foo = (NSUInteger)self.view subviews] count]

変数fooの値を表示(基本型に利用可、オブジェクトはアドレスの表示になる。)

p $foo

(int) $foo = 6


・self.viewの値を表示する。(オブジェクトのみ)

コマンド po self.view

実行結果例↓

(UIView *) $1 = 0x0e3d5c00 <UITableView: 0xe3d5c00; frame = (0 0; 320 416); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x19d9b0>; contentOffset: {0, 0}>


・self.viewの階層を再帰的に表示

コマンド po [self.view recursiveDescription]

実行結果例↓

<UITableView: 0x91e1a00; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x89a1d30>; layer = <CALayer: 0x89a0cf0>; contentOffset: {0, 0}>

| <UITableViewWrapperView: 0x89a22f0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x89a23c0>>

| <UIImageView: 0x89a16a0; frame = (0 564; 320 3); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x89a1900>>

| <UIImageView: 0x89a1af0; frame = (316 641; 3 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x89a1bd0>>


・カレントスレッドのバックトレースを3つまで表示

コマンド bt -c 3

実行結果例↓

thread #1: tid = 0x1f03, 0x00002ab5 Test02`-[AppDelegate application:didFinishLaunchingWithOptions:] + 85 at AppDelegate.m:16, stop reason = breakpoint 5.1

frame #0: 0x00002ab5 Test02`-[AppDelegate application:didFinishLaunchingWithOptions:] + 85 at AppDelegate.m:16

frame #1: 0x000107b7 UIKit`-[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 266

frame #2: 0x00010da7 UIKit`-[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1248


・キーウインドウ上の全ての曖昧な制約をプリントする

po UIWindow keyWindow] _autolayoutTrace]

実行例↓

<UIWindow:0xb851910> - AMBIGUOUS LAYOUT

| <UILayoutContainerView:0xb8591c0>

| | <UINavigationTransitionView:0xb947c20>

| | | <UIViewControllerWrapperView:0xb85a080>

省略

| | | | | | | <UIScrollView:0xb9da840> - AMBIGUOUS LAYOUT

| | | | | | | | <TestView:0xb9d9b80> - AMBIGUOUS LAYOUT


・指定したViewのHorizontal(0)/Vertical(1)制約を表示

po [0xb9da840 constraintsAffectingLayoutForAxis:0]

実行例↓

<__NSArrayM 0xb8014f0>(

<NSLayoutConstraint:0xb970380 H:[TestView:0xb96c3b0(320)]>,

<NSLayoutConstraint:0xb973410 H:|-(0)-[TestView:0xb96c3b0] (Names: '|':CommonBackgroundView:0xb9722f0 )>,

<NSLayoutConstraint:0xb973440 H:[TestView:0xb96c3b0]-(0)-| (Names: '|':CommonBackgroundView:0xb9722f0 )>,

<NSAutoresizingMaskLayoutConstraint:0xb8dee00 h=--& v=--& CommonBackgroundView:0xb9722f0.midX == + 160>

)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tanaponchikidun/20120923/1348388081
リンク元