2016-08-11 10 views
0

私のアプリケーションはqmlをフロントエンドとして、C++をバックエンドとして使用しています。
いくつかの問題を確認するために、強制的にqmlをクラッシュさせたいと思います。qmlページを強制的にクラッシュさせます

主に、qmlがクライアントサイトでクラッシュしたときにエラーメッセージが表示され、そのエラーをより適切に処理できるようになりました。 QMLページにnull値やnullポインタを割り当てるなど、いくつかのことを試しましたが、アプリケーションがクラッシュすることはありません。
C++側から、私はQQmlApplicationEngineからアプリケーションを読み込みます。 アドバイスが参考になります。

+0

終了しますか? ( 'Qt.quit();') – Velkan

+1

より良いanwserを得るには、 "QMLページをクラッシュする"ことであなたの意図が何であり、何を達成しようとしているのかを説明してください。 –

+0

主に、クラッシュ時にどのようなエラーメッセージが表示されるかを知ることに興味があります – samprat

答えて

1

QMLは:)

あなたは本当にあなたがC++での足で自分自身を撮影することができます同じように、いくつかの純粋なQML/JavaScriptコード「クラッシュ」とは、少なくともではないことはできませんがクラッシュすることはありません。

QMLとJavaScriptが解釈され、通常はエラーが発生するとQML警告が生成されます。ような何か:

qrc:/main.qml:33: ReferenceError: timer is not defined 

このエラー、あなたのローカルスコープで実行しているものは何でも操作中断、多分混乱アップ数のバインディングか、あなたが期待する正確に何をすべきか、それはあなたのQMLの「クラッシュ」はありませんでしょう応用。

しかし、あなたは常にあなたのQMLにはいくつかのC++コンポーネントを公開する場合は、あなたが技術的にあなたのQMLコンテキストからいくつかのバグのC++コードをトリガすることによってQMLからあなたのアプリケーションがクラッシュすることが

あなたのアプリケーションがクラッシュすることができます。しかし、これはあなたのC++バックエンドからアプリケーションをクラッシュと同じことである....

あなたは(ローカル)

をエラーをキャッチすることができますQML/JavaScriptエラーを扱う、あなたは同じようにあなたにこれらのエラーをキャッチすることができた場合でも壊滅的ではないがtry { ... } catch(e) { ... }メカニズムを使用して、通常のJavaScriptコードでは、Catch QML error message

に示されたようにあなたが(グローバル)エラーを報告することができます

、あなたのQMLの誤差はごQML UIの動作に影響を与えることがあります。これを防ぐための1つの可能な方法は、エラーを確実に回避するために、さまざまな方法でQMLコンポーネントを流用するUIのテストを記述することです。

テストコードで使用するトリックは、デフォルトのログハンドラをオーバーライドして、QMLエラーと警告を監視することです。これにより、私たちはQMLコンポーネントをテストすることができます(期待通りに動作しますか?)また、これらのテスト中に警告が生成されていないことを確認します。関連するドキュメントは次のURLから入手できます。http://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler

1

Qt Creatorでデバッグモードを使用できます。

enter image description here

そして、それがクラッシュしたときにアプリケーションが停止します。その後、あなたのスタックを確認することができます。

enter image description here

関連する問題