4

これはバグのようです。QtCreatorでは、Q_ASSERT(false)を使用すると、アサーションで中断できるはずだとドキュメントに記載されていても、アプリケーションが終了します。

Windowsでは、デバッグビルドの場合、この関数は_CRT_ERRORを報告し、デバッガーをアプリケーションに接続できるようにします。

Qt Creatorについて:

Qt Creator + MinGWでプロジェクトをコンパイルすると、コードQ_ASSERT(false);によってプログラムにこのメッセージが表示され(下のスクリーンショット)、その後アプリケーションが終了します。

このアプリケーションは、ランタイムに異常な方法でそれを終了するように要求しました。詳細については、アプリケーションのサポートチームにお問い合わせください。

ここに画像の説明を入力してください

[アプリケーション出力]ペインには、次のデバッグ出力が表示されます。

ASSERT: "false" in file ..\IntegrateWithQt\main.cpp, line 6
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.

Visual Studioの場合:

Visual Studioを使用して同じプロジェクトをコンパイルすると(Qtアドインでインポートします)、はるかに便利な[中止/再試行/無視]ダイアログが表示されます。このダイアログでは、[再試行]をクリックすると、アサーションの場所でプログラムが中断されます。

ここに画像の説明を入力してください

QtCreatorとVisualStudioの両方でリンクするQtIのバージョンは4.8.1です。どちらのプロジェクトもデバッグモードで構築されています。

では、Qt Creatorを使用して、デバッグモードでアサーションの行を中断できるようにするにはどうすればよいですか?

4

2 に答える 2

4

Qt Creator で Mingw を使用し、Visual Studio で MSVC (明らかに) を使用していると思います。異なるコンパイラは異なるコードを生成します。

Creator で MSVC を使用してみてください (これを行うには、そのコンパイラでビルドされた Qt バージョンを入手する必要があります!)、まだ違いがあるかどうかを確認してください。

于 2012-12-15T23:35:14.467 に答える
2
  1. おそらく QtCreator の .pro ファイルに NDEBUG が設定されていません (QtCreator のコンパイル出力で確認してください)。
  2. 標準の c++ アサートを使用http://en.cppreference.com/w/cpp/error/assert
于 2012-12-15T14:59:11.730 に答える