私は、C++、Objective-C、およびSwiftの混合物を使用するマルチスレッドOS Xアプリケーションを持っています。"libC++ abi.dylib:純仮想関数が呼び出されました!" Xcodeで
私のアプリケーションがシャットダウンしたとき、私はXcodeのデバッガウィンドウでこれを参照してください。
libc++abi.dylib: Pure virtual function called!
私は、このエラーは通常、C++クラスのコンストラクタまたはデストラクタで仮想関数の呼び出しによって引き起こされていることを知っています。
どこにあるのか簡単に見つける方法はありますか? "簡単"とは、 "仮想関数を持つすべてのクラスのすべてのコンストラクタとデストラクタのすべての行に対してコールツリーを分析しない"という意味です。
スタックトレースが表示されません。このメッセージが表示されても、デバッガはプログラムを停止しません。私のアプリケーションの代理人のapplicationDidTerminate
メソッドから記録されたメッセージがこのメッセージの前に表示されます。
私は、「すべての例外」にブレークポイントを設定しようとしたが、残念ながらそのブレークポイントは、例外の多くを使用するコードによって、多くの場合、ヒットしました。私はブレークポイントを置くことができる他のシンボルがありますか?
は、デストラクタ内で仮想メソッドを呼び出すクラス、またはデストラクタ内のメソッドを実際に呼び出すクラスを見ています。これらのメソッド自体が仮想メソッドを呼び出す可能性があるからです。基底クラスのデストラクタでは、派生クラスは存在しなくなるため、仮想関数呼び出しは基底クラスのバージョンを実行します。 –
通常は、エラーが例外 'SIGABRT'であるため、生成されたクラッシュログレポートがあります。イベントでは、 "仮想"のコードを検索し、それぞれにブレークポイントを設定することはできません。それは単に排除によってプロセスの問題でなければなりません。 –
'__cxa_pure_virtual'にブレークポイントを設定してください –