2017-02-11 2 views
-1

デバッグモードでコンパイルしたときにプログラムを正しく実行させるが、Qt Creatorではリリースモードでクラッシュする原因のリストを作成できますか?ほとんどの場合、一般的に話しましょう。一般に、Qt Creatorでは、デバッグモードでコンパイルされてもリリースモードでクラッシュすると、プログラムが正しく実行される原因は何ですか?

私の場合は、ポイントAで、プログラムが正しくコンパイルされて実行されます。いくつかの作業の後、それはコンパイルされましたが、デバッグモードではなく、リリースモードで実行時にクラッシュしました。私はAとBの間の作業にコメントしてA点に戻りました。リリースモードでのみ有効です。私はそれが眠っていたポイントAよりずっと前にやった間違いだと思う。私はオープンソースで共有したいと思っていた無料のプログラムなので、私のプログラムを終了したくないのです。

+7

未定義の可能性が高い原因です。すべてのコンパイラの警告に注意してください。警告が表示されない場合は、コンパイラの警告レベルを上げ、増加した後に警告が表示されるかどうかを確認してください。 – drescherjm

+1

コード例はありますか?現在の答えの可能性は、私にとっては広い意味でのものです。 –

答えて

1

何らかの未定義の動作がこの種の問題を引き起こす可能性があります。最も可能性の高い原因 - 配列/ベクトルの境界を越えて書くこと、またはそこから読み取ること。すでに破壊されているオブジェクトの破壊である可能性があります。または、リリースモードで実行が高速である場合にのみ再生するマルチスレッドの問題。初期化されていない構造体、またはコンストラクタに割り当てられていないPOD型のフィールドである可能性があります。

デバッグモードでは、メモリは異なる方法で割り当てられ、場合によってはランダムなガベージではなくゼロ(プログラムに渡されたとき)を含むことになります。これにより、リリースモードでのみクラッシュが発生することがよくあります。

この問題をデバッグするには、 "RelWithDebInfo"設定を設定することを強くおすすめします。リリースでビルドするときに-gオプションをGCCに渡します。したがって、アプリケーションがクラッシュしたときにデバッガで停止し、原因を特定することができます。

それ以外の場合は、コードの "バイナリ検索"のようなことをして、クラッシュの正確な場所を見つけることです。同様に、コードの半分をコメントし、まだクラッシュしていないか確認してください。

私はこの説明が少し曖昧ですが、助けてくれることを知っています!

+2

_「この説明は少し曖昧ですが...」_あまりにも漠然とした幅広い質問に対しては何が期待できますか? –

+0

"デバッグモードでは、メモリは異なる方法で割り当てられ、場合によってはランダムなガベージではなくゼロ(プログラムに渡されるとき)を含むことになります。実際には、典型的には反対です。デバッグヒープは割り当てられていないページに固定パターンを埋め込み、初期化されていないメモリバグを発見するのを助けます。 –

+0

@MatteoItaliaは、私はちょうど私の経験から言っています、あなたにも一般的には正しいかもしれないと思います。証明リンクはありますか? :) –

関連する問題