2016-10-08 19 views
0

私は小さなWindowsコードを持っていますが、基本的にはMSDN tutorialからコピーされていますが、C++に適合しています。 libwineラッパーペアhello.exe + hello.exe.soを生成するために、Linux上でクロスコンパイルされたWindowsコードを正しくデバッグする方法は?

  • wineg++ -g hello.cpp -o helloをネイティブのWindows PE32の実行可能ファイルを生成するために

    • i686-w64-mingw32-g++ -g hello.cpp -o hello:私は、のいずれかの方法を使用して、今それをコンパイルすることができます。

    私が今欲しいのは、(可能ならば、それにgdbまたはインタフェース)デバッガでファイルを開始し、エントリポイントWinMain停止することです。私はこれでひどく失敗している。私が試してみました何すべては全体の??で、まったくのシンボルが見つからない:ローカルgdbtarget remote :2000続い

    • wine /usr/i686-w64-mingw32/sys-root/mingw/bin/gdbserver.exe :2000 hello:(注意:以下では、拡張子なしhelloは、Windowsの実行ファイル、かなりunconventially、です) 10+スタックフレーム

    • wine /usr/i686-w64-mingw32/sys-root/mingw/bin/gdb.exe hello::ハングは、コマンドラインrun hello続い

    • gdb wine上の任意のユーザー入力を受け付けませんどこでも

    • 、一切のシンボル ??:それは右の環境を設定しますが、最後に gdbを実行されるように

    • hello.exeスクリプトを変更しないSIGSEGVが発生します。私は、エラーが

    • gdb hello.exe.soまま、とと--gdbなし

    • winedbg helloは黒いコンソールウィンドウで始まり、私は中にステップすることができますが、何が私のコードでは、まだ??であり、これまでに最も遠くを取得します - アウト編とWinMain(またはその文字列を含むもの)は、(wineg++の出力用)

    • winedbg hello.exe

      を知られていない:プログラムのロード完全に、デバッガがそれを待ってハングがすでにバックグラウンドで実行しながら、

    • アプリケーションを実行してwinedbgに接続すると目的に合わない(エントリポイントで停止することはできません)が、最後の2つの点のようにほとんど機能します(出力がMinGWで動作しますが、 hello.exeの内部はwineg++の出力ではまったく動作しません)。

    • 公式と非公式のチュートリアル、バグレポート、SOの質問の読み込みトン...

    私も、私が試した他の組み合わせを覚えることができません。確かにそれは難しいことはありませんか?

  • 答えて

    1

    私はそれを理解したようです。コンパイルコマンドライン

    i686-w64-mingw32-g++ -gstabs hello.cpp -o hello.exe 
    

    と私は

    winedbg hello.exe 
    

    とそのコマンドラインで実行することができ、

    break [email protected] 
    cont 
    

    重要なオプションではなく-gwinedbgのための無--gdb-gstabsました。私はthis mailing list threadを読んだ後で両方を考え出し、より関連性の高い情報がここで議論されます。 in the link above概説の理由で裸winedbgは(少なくとも箱から出して)それは名前の符号化と、そのようなことになると真剣に低下しているが、gdbが動作しないこと

    注意。

    0

    あなたはwinedbg --gdb --no-start progra.exeを実行することができます。この後、ホッパーのdissansamblerを使用して、取得したポートに接続できます。

    関連する問題