説明はここから始まります:SDL2&GDB:プログラム受信信号?、不明な信号
WindowsでSDL2ライブラリで再生しています。私はそれを使ってプログラムをコンパイルすることができ、.exeを実行するとうまく動作します。 GDBを使用してデバッグしようとすると問題が発生します。コードがSDL_InitまたはSDL_OpenAudio関数(新しいスレッドを作成する可能性がある)に来ると、GDBは停止し、「プログラム受信シグナル?未知信号」メッセージを表示し、実行を再開します。プログラムがクラッシュします。
明らかにスレッド命名に関連するGDB(https://www.mail-archive.com/[email protected]/msg149735.html)のバグがあります.GDBバージョン7.11.1-1で修正する必要があります。
最初はGDB 5.1.0(TDM)をGDB 7.6.1で使用していましたので、私は新しいバージョンに更新することにしました。私はMinGW-w64をインストールしました(私は今は覚えていませんが、GDBのバージョン7.11だったかもしれません)。TDMは約2年前からアップデートを提供していないようです。助けてくれなかった、GDBスチールクラッシュ。
次は、GDBの新しいバージョンを検索し、7.12(wwwドット式ドットコム/サーブレット/ equation.cmd?fa = gdb)が見つかりました。うまく動作しませんでした、おそらく修正は、このバージョンにしなかった。
明らかにこのバグはGDBのx86版にのみ存在するはずなので、x64版のTDM(GCC 5.1.0とGDB 7.9.1)をインストールしました。プログラムはうまくコンパイルされましたが、GDBはまだ未知のシグナルやプログラムのクラッシュをキャッチしています。
今はSDL2を使用しているプログラムを効果的にデバッグできません。それで、質問は、私はそれを再び働かせるために何ができるのですか?
考えられる解決策:
- 使用Visual Studioの - 私は、Eclipseが好き(とそれは私が、私はそれで好きではない事を容認し始め意味)と本当に新しい全体勉強したくありませんIDEですが、私は最後のオプションとしてそれを保持します。
- GDBをコンパイルしてみました。うまくいきませんでした.Windowsでのコンパイルがほとんど役に立たず、GDB 7.12でもこのバグがありました。
- Linuxに切り替える - Visual Studioに移行するよりもさらに抜本的な選択肢です。
- SDL 1.2にフォールバックしました。 - それ以前はもっと簡単でした...
- 他のライブラリに切り替えてください...彼らがGDBと協力してくれることを願っています。それは本当に解決策のようには聞こえません。
- 別のコンパイラに切り替えますか?
- スレッドの名前付けを無効にしますか?
コードサンプル:
#include <SDL2/SDL.h>
// Normally I'd use #undef main
int WinMain(int, char**)
{
SDL_Init(SDL_INIT_EVERYTHING);
return 0;
}
編集:G ++ gdbtest.cpp -lSDL2main -lSDL2
SDL2バージョン:2.0.5(Windowsの、MinGWのための最新のビルド、32bit版)
通常の実行:a。exeファイル
結果:プログラムが起動し、GDBを実行して正常に
を終了します。Console log
結果:GDBは、未知の信号を受信したが、プログラムはあなたの新しい情報に基づいて
これ以上続くことはありません。私たちが理解するのに役立つ最小限のコードを投稿できますか?あなたの環境についての詳細 - 投稿したライブラリ、コンパイルやリンクに使用されるコマンドライン引数など。 – Leonardo
完了コードは最小限に抑えられます。 – crueltear