2016-10-08 107 views
0

我有一小段Windows代碼,基本上是從MSDN tutorial複製的一個,但適用於C++。我可以編譯它現在使用的方法之一:如何在Linux上正確調試交叉編譯的Windows代碼?

  • i686-w64-mingw32-g++ -g hello.cpp -o hello產生本地Windows可執行PE32,

  • wineg++ -g hello.cpp -o hello產生libwine包裝對hello.exe + hello.exe.so

所有我現在想的是(如果可能的話gdb或接口的話)可以在調試程序文件啓動,並在入口點WinMain停止。我在這方面做得很糟糕。我曾嘗試(注:在下面,hello沒有擴展,相當unconventially,Windows的可執行文件):

  • wine /usr/i686-w64-mingw32/sys-root/mingw/bin/gdbserver.exe :2000 hello隨後target remote :2000在本地gdb:沒有發現任何符號可言,一切都是??跨越10+堆棧幀

  • wine /usr/i686-w64-mingw32/sys-root/mingw/bin/gdb.exe hello:掛起,不接受該命令行

  • gdb wine隨後run hello上的任何用戶輸入:Missing separate debuginfos, use: dnf debuginfo-install wine-core-1.9.19-1.fc24.i686,我做到了,並錯誤仍

  • gdb hello.exe.so:導致SIGSEGV

  • 修改hello.exe腳本,以便它設置合適的環境,但速度到底gdb:沒有任何符號,??到處

  • winedbg hello與不--gdb得最遠到目前爲止,搭配黑色控制檯窗口開始,讓我一步,但無論是在我的代碼仍然是?? - 編出並WinMain(或包含該字符串的任何東西)是未知的

  • winedbg hello.exe(對於wineg++輸出):程序加載充分,調試器掛起等待它,而它已經在後臺運行

  • winedbg上運行應用程序並附加到它:不符合目的(不允許我在入口點停止),但除此之外大多數情況下最後兩點的作用(與輸出MinGW一起使用,但不顯示任何內部結構爲hello.exe,完全不工作,輸出wineg++)。

  • 閱讀噸的官方和非官方的教程,錯誤報告,做題的......

我甚至不記得其他組合我試過了。肯定不會那麼難?

回答

1

看來我明白了。隨着編譯命令行

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

我可以運行

winedbg hello.exe 

,並在其命令行,

break [email protected] 
cont 

重要的選擇是-gstabs代替-g並沒有--gdbwinedbg 。我在閱讀this mailing list thread後發現了兩個更相關的信息。

需要注意的是,當涉及到名稱重整和這樣的裸winedbg嚴重受損,但gdb將無法​​正常工作(至少不能開箱即用)的概述in the link above的原因。

0

您可以運行winedbg --gdb --no-start progra.exe。然後您可以使用Hopper dissansambler並附加到您獲得的端口。