On Mon, 22 Feb 2010 21:14:08 -0500, Ellery Newcomer <ellery-newco...@utulsa.edu> wrote:

Is there any decent way to figure out where segfaults are coming from?

e.g. 200k lines of bad code converted from java

I tried gdb, and it didn't seem to work too well.

Die: DW_TAG_type_unit (abbrev 3, offset 0x6d)
   parent at offset: 0xb
   has children: FALSE
   attributes:
     DW_AT_byte_size (DW_FORM_data1) constant: 8
Dwarf Error: Missing children for type unit [in module /home/ellery/dxl.exe]
Missing separate debuginfos, use: debuginfo-install glibc-2.11.1-1.i686


And I'm not proficient with gdb.

dmd 1.056 / tango .99999 or whatever

fedora linux

GDB is probably the best option. Have you tried compiling with -gc? I've had luck with that in the past.

Segfault gives you a signal (SIGSEGV), you could try handling the signal to print information about where the program is.

Other than that, you could try logging. Tango has really good logging facilities. Try putting logging messages in functions that get called at various stages in the program. You can continue to narrow down where the failure is by instrumenting even further. Once you determine the function it's in, then I usually do something like this after every line:

Stdout.formatln("here {}", __LINE__);

Of course, Tango's Stdout is thread unsafe, I can't remember the thread safe version, something like Trace (if you are using threads).

You should get a line number just before the failed call.

-Steve

Reply via email to