私は小さな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
で停止することです。私はこれでひどく失敗している。私が試してみました何すべては全体の??
で、まったくのシンボルが見つからない:ローカルgdb
にtarget 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
上の任意のユーザー入力を受け付けませんどこでも 、一切のシンボル
が
hello.exe
スクリプトを変更しないSIGSEGVが発生します。私は、エラーがgdb hello.exe.so
まま、とと--gdb
なしwinedbg hello
:は黒いコンソールウィンドウで始まり、私は中にステップすることができますが、何が私のコードでは、まだ??
であり、これまでに最も遠くを取得します - アウト編とWinMain
(またはその文字列を含むもの)は、(wineg++
の出力用)
を知られていない:プログラムのロード完全に、デバッガがそれを待ってハングがすでにバックグラウンドで実行しながら、winedbg hello.exe
アプリケーションを実行して
winedbg
に接続すると目的に合わない(エントリポイントで停止することはできません)が、最後の2つの点のようにほとんど機能します(出力がMinGW
で動作しますが、hello.exe
の内部はwineg++
の出力ではまったく動作しません)。公式と非公式のチュートリアル、バグレポート、SOの質問の読み込みトン...
??
:それは右の環境を設定しますが、最後に
gdb
を実行されるように
私も、私が試した他の組み合わせを覚えることができません。確かにそれは難しいことはありませんか?