在使用mingw-w64

时间:2017-10-07 12:47:54

标签: gdb cygwin 64-bit wxwidgets mingw-w64

我正在尝试使用gdb来调试mingw-w64编译的32位二进制文​​件。 但是,gdb提供了许多警告,并且没有显示任何堆栈跟踪。 我该如何正常调试此过程?

以下是一些相关细节:

  • 此GDB配置为“x86_64-pc-cygwin”。
  • GNU gdb(GDB)(Cygwin 7.10.1-1)7.10.1
  • 我正在编译wxWidgets库并用它构建我的程序。但这与此问题无关,除了--host=i686-w64-mingw32 --build=i686-pc-cygwin标志与wxWidgets configure一起使用。

ashish@DESKTOP-133N35M /cygdrive/c/Users/ashish/work/reachit

$ gdb program.exe
GNU gdb (GDB) (Cygwin 7.10.1-1) 7.10.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-cygwin".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from program.exe...done.
(gdb) b ReachItButton::OnChar(wxKeyEvent&)
Breakpoint 1 at 0x734672: file binReach.cpp, line 49.
(gdb) r
Starting program: /cygdrive/c/Users/ashish/work/reachit/program.exe
[New Thread 6148.0x184]
warning: `/cygdrive/c/Windows/SYSTEM32/ntdll.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.
warning: `/cygdrive/c/Windows/System32/wow64.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.
warning: `/cygdrive/c/Windows/System32/wow64win.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.
warning: dll path for "WOW64_IMAGE_SECTION" can not be evaluated
warning: Could not load shared library symbols for WOW64_IMAGE_SECTION.
Do you need "set solib-search-path" or "set sysroot"?
warning: dll path for "WOW64_IMAGE_SECTION" can not be evaluated
warning: Could not load shared library symbols for WOW64_IMAGE_SECTION.
Do you need "set solib-search-path" or "set sysroot"?
warning: dll path for "NOT_AN_IMAGE" can not be evaluated
warning: Could not load shared library symbols for NOT_AN_IMAGE.
Do you need "set solib-search-path" or "set sysroot"?
warning: dll path for "NOT_AN_IMAGE" can not be evaluated
warning: Could not load shared library symbols for NOT_AN_IMAGE.
Do you need "set solib-search-path" or "set sysroot"?
warning: `/cygdrive/c/Windows/System32/wow64cpu.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.
[New Thread 6148.0x2b4]
[New Thread 6148.0x314]
[New Thread 6148.0x103c]
12:33:26: mylog In ReachItPanel :
12:33:28: mylog In ReachItButton.. onChar
gdb: unknown target exception 0x4000001f at 0x734672

Program received signal ?, Unknown signal.
0x0009dfe8 in ?? ()
(gdb) bt
#0  0x0009dfe8 in ?? ()
#1  0x00000000 in ?? ()
(gdb) q
A debugging session is active.

        Inferior 1 [process 6148] will be killed.

Quit anyway? (y or n) y

ashish@DESKTOP-133N35M /cygdrive/c/Users/ashish/work/reachit
$

在config.log中我给出了gcc / configue:-C --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=i686-w64-mingw32

/cygdrive/i/szsz/tmpp/cygwin64/mingw64-i686/mingw64-i686-gcc-5.4.0-4.x86_64/src/gcc-5.4.0/configure --srcdir=/cygdrive/i/szsz/tmpp/cygwin64/mingw64-i686/mi
ngw64-i686-gcc-5.4.0-4.x86_64/src/gcc-5.4.0 --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc --docdir=/usr/share/doc/mingw64-i686-gcc --htmldir=/usr/
share/doc/mingw64-i686-gcc/html -C --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=i686-w64-mingw32 --without-libiconv-prefix --without-libintl-prefix --with-sysr
oot=/usr/i686-w64-mingw32/sys-root --with-build-sysroot=/usr/i686-w64-mingw32/sys-root --disable-multilib --disable-win32-registry --enable-languages=c,ada,c++,fortran,lto,
objc,obj-c++ --enable-fully-dynamic-string --enable-graphite --enable-libgomp --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-version-specific-ru
ntime-libs --with-dwarf2 --with-gnu-ld --with-gnu-as --with-tune=generic --with-cloog-include=/usr/include/cloog-isl --with-system-zlib --enable-threads=posix --libexecdir=
/usr/lib

Gdb是64位,二进制是32位。 我可以尝试使用64位二进制文​​件,但我不确定为什么mingw-w64 g ++编译器不会生成64位二进制文​​件。

cygwin是64位。

我已编译二进制文件:

 i686-w64-mingw32-g++ -ggdb -O0  binReach.cpp `wx-config --cxxflags 
 --libs std` -Wall -o program -static-libgcc -static-libstdc++ -Wl,
 -Bstatic,-lstdc++,-lpthread -Wl,-Bdynamic

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您必须分别下载32位和64位的gdb。 因为根据mingw-64的todo list,已经完成了gcc multilib版本,但是gdb multilib版本仍在进行中,因此您不能使用单个gdb来调试32位和64位,您可以在将来使用它