2017-10-07 123 views
0

我想用gdb调试mingw-w64编译的32位二进制文​​件。 但是,gdb给出了很多警告,并没有显示任何堆栈跟踪。 我怎样才能正常调试这个过程?在用mingw-w64编译的cygwin窗口中调试32位二进制文​​件

这里有一些相关的细节:

  • 这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一起使用。

[email protected] /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 

[email protected] /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 
+0

我想我打这个问题:https://virtuallyfun.superglobalmegacorp.com/2015/ 10/04/32bit-64bit-gdb-collision/ 但我在cygwin64中找不到任何gdb32.exe –

+0

要生成32位目标,你应该在wxWidgets build和你的程序中使用'-m32'标志。 – Ripi2

+0

@ Ripi2二进制文件已经是32位。我需要它是64位。 –

回答

相关问题