読者です 読者をやめる 読者になる 読者になる

try! Swift SwiftコンパイラとLLDBの連携 #tryswiftconf Day2-7

try! Swift 2016

Novall Khan

SplitwiseでiOSエンジニアをしており、Apple Watch上での割り勘できる機能の開発をしています。SplitwiseのiPhoneアプリに素晴らしい新機能を実装しました。また、HCIの研究者、メンタルヘルス、technology spaceへのコントリビューター、コンピューターが出てくる以前のコンテキストでのコーディングに対する提唱者でもあります。

twitter.com

デバッグはLLDBとSwiftコンパイラの日々の進歩によってさらに簡単になっています。デバッグコンソールを使った新しいテクニック、Swiftにおけるエラーハンドリング、特定のエラーが発生したところでブレークする方法を学びます。またデータフォーマットの方法の改善、名前付きブレークポイントなどを見ていきます。

f:id:niwatako:20160303150033j:plain

友達と費用を分けるアプリを作っています。ルームシェアとかグループ旅行とか。 多言語対応していて、日本語対応手伝ってくださるかたQAセッションへぜひお越しください。

LLDBの話を何故するのか、いろいろ難しいことにぶつかることがあってツールがあったほうが良い。データフォーマットが良くなればエラーをより早く見つけることが可能になる。

スマートにブレークポイントを設定することで、ブレークポイントを編集、名前をつけたりすることでやりやすくする。 f:id:niwatako:20160303150214j:plain コンパイラはLLDBの重要な部分です。コンパイラでプログラムの機能の仕方、データレイアウトの方法、変数関数の呼び方を見ることが出来ます

p コマンドを送るだけです。

LLDBには2つのコンパイラが有ります、clangはObjective-CSwiftはSwfitコンパイラf:id:niwatako:20160303150325j:plain なぜこのシンプルなループカウンタの話をするか SwiftコンパイラはLLDBの中に入っている f:id:niwatako:20160303150352j:plain 実行時にプログラムをインジェクトすることが出来る

f:id:niwatako:20160303150410j:plain f:id:niwatako:20160303150423j:plain f:id:niwatako:20160303150427j:plain

LLDBがデータをコンパイラに示してこのコードを生成する

LLDBがたくさんのことを裏でやってくれる。モジュールにもアクセスできる。 f:id:niwatako:20160303150456j:plain

Objective-Cでは常にこのようでは、ありません。 f:id:niwatako:20160303150517j:plain

2つのNameSpaceがあります。 f:id:niwatako:20160303150547j:plain Swiftの結果は$R0に格納されます f:id:niwatako:20160303150602j:plain

詳細がすぐに分かります f:id:niwatako:20160303150626j:plain

f:id:niwatako:20160303150644j:plain

f:id:niwatako:20160303150658j:plain f:id:niwatako:20160303150711j:plain

時としてエラーの結果を見たいのではなくエラーを起こしたコードを見たい時もあると思います。 f:id:niwatako:20160303150755j:plain

-O で条件を特定のものだけにすることが出来ます f:id:niwatako:20160303150803j:plain

インターフェースなら f:id:niwatako:20160303150825j:plain ここからExceptionBreakpoint:シンボリックなブレークポイントを仕掛け特定のメッセージの発生にブレークポイントを設定できます f:id:niwatako:20160303150906j:plain

最初の3回スキップとか f:id:niwatako:20160303150920j:plain

f:id:niwatako:20160303150935j:plain

華々しくないかもしれないが素晴らしい。ネストされたデータを扱うときなど。

Swiftには po がある。インプロセスフォーマットモデル。

これら4つに基づきます f:id:niwatako:20160303151025j:plain f:id:niwatako:20160303151059j:plainf:id:niwatako:20160303151105j:plain f:id:niwatako:20160303151116j:plainf:id:niwatako:20160303151120j:plain

CustomStringConvertibleですね。

みにくいのでCustomStringConvertibleを実装してみます f:id:niwatako:20160303151130j:plain f:id:niwatako:20160303151145j:plain

Thank you

気に入った記事は はてなブックマーク

はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift

そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!