Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

is there a way to generate a gdb-readable coredump when running programs compiled with MinGW?

Tags:

c

windows

mingw

gdb

I'm trying to debug a Windows program compiled using MinGW's gcc that only ever segfaults when run outside of gdb (probably some race condition... lovely.) The problem is, when the program crashes and I'm not running GDB, I can't get a stack trace... I have the option to open up the program in MSVC when it crashes, but MSVC can't read gcc's debugging symbols and so the stack trace it gives me is useless.

Is there a way to get Windows to create a core dump that I can then later open in MinGW's gdb? Alternatively, is there a way to take MSVC's stack trace (which has raw addresses but no symbols) and use gcc to get a human-readable trace?

like image 429
user168715 Avatar asked Apr 28 '11 06:04

user168715


People also ask

What is coredump generation?

Core dump files provide a snapshot of a systems memory and process information, and are therefore useful when generated before a process crashes or otherwise exits abnormally. They are a useful aid in identifying bugs or other problems that led to a process crash.

What is core file in gdb?

What is a core file? A core file is an image of a process that has crashed It contains all process information pertinent to debugging: contents of hardware registers, process status, and process data. Gdb will allow you use this file to determine where your program crashed.

Where is the Coredump file?

By default, all core dumps are stored in /var/lib/systemd/coredump (due to Storage=external ) and they are compressed with zstd (due to Compress=yes ). Additionally, various size limits for the storage can be configured. Note: The default value for kernel.


1 Answers

windows does not create core files (on linux they are dumped by the kernel iirc) you can try to attach with gdb with the crash dialog opened but I doubt it will work

if you use msvc instead you can create a minidump debuggable in visualstudio but there is no way to create same dump with gcc

google made a software that you may find useful, but I'm not sure it can produce stuff with gcc

http://code.google.com/p/google-breakpad/

or you can set drmingw as jit debugger

drmingw -i

I'm sure it is possible to get something like a backtrace also on mingw, since mingw compiled llvm is able to dump a trace

http://code.google.com/p/backtrace-mingw/

looks like simpler but I've not tested it

compile with -g3 (and if you can -O0)

like image 131
sherpya Avatar answered Oct 07 '22 18:10

sherpya