Debugging 32 bit binary in cygwin windows compiled with mingw-w64

4

I am trying to use gdb to debug mingw-w64 compiled 32 bit binary. However, gdb gives many warning and does not show any stack trace. How can i debug this process normally ?

Here are some relevant details :

  • This GDB was configured as "x86_64-pc-cygwin".
  • GNU gdb (GDB) (Cygwin 7.10.1-1) 7.10.1
  • I am compiling wxWidgets library and building my program with it. But that should not be relevant to this question except that --host=i686-w64-mingw32 --build=i686-pc-cygwin flags were used with 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
$

In config.log i have gcc/configue being given : -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 is 64 bit and binary is 32 bit. I can try with 64 bit binary but i am not sure why mingw-w64 g++ compiler is not generating 64 bit binary.

cygwin is 64 bit.

I have compiled binary with :

 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
gdb
cygwin
64-bit
wxwidgets
mingw-w64
asked on Stack Overflow Oct 7, 2017 by Ashish Negi

2 Answers

0

Use a 32 bit gdb for debugging from : http://www.equation.com/servlet/equation.cmd?fa=gdb

answered on Stack Overflow Oct 9, 2017 by Ashish Negi
0

You have to download gdb for 32bit and 64bit separately. Because according to mingw-64's todo list, gcc multilib version is done,but gdb multilib version is still in progress,so you can't use single gdb to debug both 32bit and 64bit,you could use it maybe in the future.

answered on Stack Overflow May 18, 2020 by 傅继晗

User contributions licensed under CC BY-SA 3.0