[解決済み] XcodeのAll Exceptionsブレークポイント使用時に特定の例外を無視する。
質問
Xcode で All Exceptions ブレークポイントが設定されています。
のような行でXcodeが止まってしまうことがあります。
[managedObjectContext save:&error];
を実行すると、以下のようなバックトレースが表示されます。
というメッセージが表示されますが、[続行] をクリックすると、プログラムは何事もなかったかのように続行されます。
これらの "normal" 例外を無視して、私自身のコードの例外でデバッガを停止させるにはどうしたらよいでしょうか。
(Core Data が内部的に例外をスローおよびキャッチするためにこれが起こること、そして Xcode が例外がスローされるたびにプログラムを一時停止する私の要求に単に応えていることを理解しています。)
Core Data の例外を無視したいです。しかし、私はこれらを無視したいので、自分のコードのデバッグに戻ることができます!)
モデレーター: これは Xcode 4 の例外ブレークポイントのフィルタリングと同じです。 , しかし、私はその質問がポイントに回り込むのに時間がかかりすぎ、有用な答えを持っていないと思います。それらはリンクすることができますか?
どのように解決するのですか?
私は、よりシンプルな構文で Objective-C 例外を選択的に無視できる lldb スクリプトを書き、OS X、iOS Simulator、および 32 ビットと 64 ビットの ARM の両方を処理しました。
インストール
-
このスクリプトを
~/Library/lldb/ignore_specified_objc_exceptions.py
またはどこか便利な場所に配置します。
import lldb
import re
import shlex
# This script allows Xcode to selectively ignore Obj-C exceptions
# based on any selector on the NSException instance
def getRegister(target):
if target.triple.startswith('x86_64'):
return "rdi"
elif target.triple.startswith('i386'):
return "eax"
elif target.triple.startswith('arm64'):
return "x0"
else:
return "r0"
def callMethodOnException(frame, register, method):
return frame.EvaluateExpression("(NSString *)[(NSException *)${0} {1}]".format(register, method)).GetObjectDescription()
def filterException(debugger, user_input, result, unused):
target = debugger.GetSelectedTarget()
frame = target.GetProcess().GetSelectedThread().GetFrameAtIndex(0)
if frame.symbol.name != 'objc_exception_throw':
# We can't handle anything except objc_exception_throw
return None
filters = shlex.split(user_input)
register = getRegister(target)
for filter in filters:
method, regexp_str = filter.split(":", 1)
value = callMethodOnException(frame, register, method)
if value is None:
output = "Unable to grab exception from register {0} with method {1}; skipping...".format(register, method)
result.PutCString(output)
result.flush()
continue
regexp = re.compile(regexp_str)
if regexp.match(value):
output = "Skipping exception because exception's {0} ({1}) matches {2}".format(method, value, regexp_str)
result.PutCString(output)
result.flush()
# If we tell the debugger to continue before this script finishes,
# Xcode gets into a weird state where it won't refuse to quit LLDB,
# so we set async so the script terminates and hands control back to Xcode
debugger.SetAsync(True)
debugger.HandleCommand("continue")
return None
return None
def __lldb_init_module(debugger, unused):
debugger.HandleCommand('command script add --function ignore_specified_objc_exceptions.filterException ignore_specified_objc_exceptions')
-
に以下を追加します。
~/.lldbinit
:command script import ~/Library/lldb/ignore_specified_objc_exceptions.py
置き換え
~/Library/lldb/ignore_specified_objc_exceptions.py
を正しいパスに置き換えてください。
使用方法
- Xcode で、すべての Objective-C 例外
-
ブレークポイントを編集し、以下のコマンドでDebugger Commandを追加します。
ignore_specified_objc_exceptions name:NSAccessibilityException className:NSSomeException
-
これは、以下のような例外を無視します。
NSException
-name
にマッチするNSAccessibilityException
または-className
マッチNSSomeException
このような感じになるはずです。
あなたの場合
ignore_specified_objc_exceptions className:_NSCoreData
参照 http://chen.do/blog/2013/09/30/selectively-ignoring-objective-c-exceptions-in-xcode/ を参照してください。
関連
-
[解決済み] Cocoapodsの使用時にXcodeの警告を無視する
-
[解決済み] iphone Core Data 保存時に未解決のエラーが発生する。
-
[解決済み] .xibファイルと.storyboardの違いは何ですか?
-
[解決済み] 再署名 IPA (iPhone)
-
[解決済み] ナビゲーションコントローラスタック、サブビュー、モーダルコントローラを使用せずに、ビューコントローラの変化をアニメーション化する?
-
[解決済み] テーブルビューの行をプログラムで選択する
-
[解決済み] iphoneシミュレーターでキーボードを使うにはどうしたらいいですか?
-
[解決済み] iPhoneシミュレーター - 低速接続をシミュレートする?
-
[解決済み] UITableViewのセクションヘッダーのデフォルトの高さ
-
[解決済み] AVAudioPlayerがデバッグモードでブレークポイントを投げる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] iOSシミュレータでファイルシステムを確認する方法はありますか?
-
[解決済み] Xcode 4.2 - '...' の宣言は、この関数の外では表示されません 警告
-
[解決済み] プロダクションコードでNSLog()を使ってはいけないというのは本当ですか?
-
[解決済み] Push Notificationのアラートテキストは何文字まで可能ですか?
-
[解決済み] UIViewのサブビューをセンタリングする方法
-
[解決済み] オプションのメソッドを持つプロトコルを作成するには?
-
[解決済み] AppDelegate.mで画面上に現在表示されているUIViewControllerを取得する。
-
[解決済み] UITextFieldの高さを設定するには?
-
[解決済み] iPhone-Portrait-NumberPadキーボードでタイプ4をサポートするキープレインが見つからない; 3876877096_Portrait_iPhone-Simple-Pad_Defaultを使用
-
[解決済み] iPhoneでNSStringをAES暗号化する方法