2016-04-08 13 views
1

QtのQML言語は、あらゆる種類の「厳密」モードを提供しますか?特に、私が好きな二つの特徴がある:(fooは、既存のプロパティですが、fooがnullのときbarが定義され、そしてfoo.barされていない場合などfoo = barQMLの「厳密」モードですか?

  • アプリケーションのクラッシュはundefinedまたはnullを基準に
  • "ハード"がアサートされます(console.assert機能はアプリケーションをクラッシュさせません)。
+0

あなたは**クラッシュしたいですか? – dtech

+0

@ddriverはい、開発中です。コンソール出力を読み込み、さまざまな問題が深刻であることを推測するよりもずっと簡単です。 (これは、少なくとも私の意見では、少なくともQML側でうまく設計されていないアプリです。) –

+3

@ddriverクラッシュするアプリケーションのより一般的な防御と、私が愛しているようなエラー処理に関する記事プロモーションを楽しむには、「バグは回復不能のエラーではありません!ここに:http://joeduffyblog.com/2016/02/07/the-error-model/ –

答えて

8

すべて.qml 1.使用QMLの糸くず

実行qmllintとQMLのエラー/警告

のビルド設定

find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \{\} + 

2.クラッシュアプ​​リで.jsファイル

カスタムQDebugメッセージハンドラ関数を書くstatic void handler(QtMsgType type, const QMessageLogContext& context, const QString &message);qInstallMessageHandler(&MyQDebugMessageHandler::handler);で登録するとQMが変わります致命的なログにL警告:

if (type == QtWarningMsg) 
{ 
    auto fatalWarnings = std::vector<QString>{ 
      QStringLiteral("ReferenceError:"), 
      QStringLiteral("is not a type"), 
      QStringLiteral("File not found"), 
    }; 

    for (const auto &s : fatalWarnings) 
    { 
     if (message.contains(s)) 
     { 
      type = QtFatalMsg; 
      break; 
     } 
    } 
} 

はその後タイプQtFatalMsgのQDebugメッセージアプリをクラッシュされていることを確認します。 console.assert上

3.クラッシュ()

console.assert()は、それらを検出するために特定のエラーが、何を作成します。だから、ポイント2を適応させて、エラー時にもアプリケーションをクラッシュさせてください。

+0

私のゴシック。 qmllintについて私はどのように知りませんでしたか?私はこのGUIで作業を始めて以来、これほどのことを望んできました。それと残りのために本当にありがとう。 –

+0

:)私の喜び! –

関連する問題