2017-08-17 20 views
0

私のQtアプリケーションのクラッシュの原因を調べようとしていますが、デバッグには利用可能な情報が多く含まれていないため、理由を見つけることは困難です。 。ブレークポイントを使用した後、私が見つけた最も近いのは、クラッシュがw.show()コール(アプリケーションのGUIは、ボタンや何かが表示される前にフロート)にある行でした。 (私は前に述べたように、ではなく、正しく、GUIのfrooze)ラインがw.show()は、アプリケーションの起動に達している場合と、数分後、私はセグメンテーション違反やデバッガを得たときMainWindow.Show()コールで起動時にQtアプリケーションがクラッシュする

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 

    // disable Window's maxminize button 
    const Qt::WindowFlags flags = w.windowFlags()^Qt::WindowMaximizeButtonHint; 
    w.setWindowFlags(flags); 
    w.show(); 
    return a.exec(); 
} 

:私の主な機能は、まさにこれです次のようになります。

enter image description here

がどのように私はこの問題を解決することができますか?私はこの日に、デバッガにより多くの情報を与えて、SEGFAULTの理由をトレースすることができるようにしようとしていますが、デバッガ情報がないので、何をすべきか分かりません。

私Qtのバージョン:

enter image description here

答えて

0

実測溶液:

// disable Window's maximize button (use bitwise [and-not]&~ and not [xor]^) 
const Qt::WindowFlags flags = w.windowFlags() &~ Qt::WindowMaximizeButtonHint; 
w.setWindowFlags(flags); 

又はその同様の効果をすることによって達成することができます!私はクラッシュがGBIEH.dll DLLから結果だったが分かったデバッグメッセージで

は、それが同じ問題を持つ人には便利だと思います。私はそれがインターネットバンキングに関連していることを知った(私のアプリケーションがそのDLLを使用しようとしたときに、IBのアプリケーションがこれを攻撃の一種、従ってクラッシュ、私の推測としてとると思う。私はちょうどインターネットバンキングprogramaを削除し、アプリケーションは正常に働いた。

0

このような問題に取り組むためのさまざまな方法は、あなたがMCVEを提供することはできませんと仮定すると、あります

  • ストリップメインウィンドウ1の要素ずつ最初にコンストラクタから、そして何がクラッシュを生成するかを参照してください。
  • コンストラクタから要素を取り除くことができたら、その一部を復元し、デバッガを実行してstu dyフリーズの原因
  • GUIプログラムのフリーズは、通常、イベントループがブロックされていることを意味します。どこでもQApplication::processEvents()に電話している場合は、それを削除することを検討してください。
  • 最後に、すべてが失敗したら、Linuxシステムに行き、Qtをデバッグモードで再コンパイルする必要があります(デバッグ+リリースは私のために働いたことはありません)。イベントループを追跡し、コード内でフリーズあなたのGUI。

私はLinuxを推奨している理由は、gdbが優れていることとcdbがこれで恐ろしいことだからです。 VSエンタープライズをお持ちの場合は、デバッガを試すこともできます。

幸運。

+0

私はすでにコンストラクタのすべての行にブレークポイントを置いて#1を試しましたが、コンストラクタの終わりに達しました。だからエラーはありません。 #2:#1と同じです。 #3アプリケーションの起動時にどこでも呼び出さない。だから私はそれもそれをexcldueだと思います。 #4はチップのおかげで、私はこれにもっと時間を費やしたら、私はLinuxで試してみるでしょう。 #5:私は今すぐvsデバッガに接続しようとします。再度、感謝します! – Jack

0

問題(固定)は、元のコードの一部:

w.setWindowFlag(Qt::WindowMaximizeButtonHint, false); 
+0

修正していただきありがとうございます。しかし、 'w.setWindowFlag()'はエラーが見つかりません。どのQtバージョンを使用していますか? – Jack

+0

私はMacとLinux上でQt 5.7と5.9を使用しています(問題とは無関係かもしれません)。ラインが正しくなく、あなたが望むものを与えていない。あなたのシステムのどこかでGBIEH.dllについて知ることができませんでした。数年前からWindows上でQtアプリケーションを実行することは決してありません。コードはクラッシュすることはありませんが、1つの明らかなエラーだけで非常に簡単です。 – AlexanderVX

関連する問題