How to debug Segmentation Fault?
Bottled Gin via Digitalmars-d
digitalmars-d at puremagic.com
Sun Dec 13 21:26:52 PST 2015
Greetings
I am calling a D function from an opensource application coded in
C/C++. My code crashes, though there is no reason for it to
crash. Also when I call my D function from inside D, it does not
crash. The D function does not take any arguments, nor does it
try to access any variable declared in C/C++. So it seems to me
that it is some memory corruption issue.
But since I am not able to reproduce the crash in standalone D
code, I am not able to file a bug.
Can someone please guide me how I can debug this further? I have
reduced the D code that crashes, but it crashes only when called
from the opensource C/C++ application. The C/C++ application is
single threaded and therefor gives full control to D function.
And then D code runs for some time and crashes thereafter with a
segmentation fault. I am pasting the D code below (C++ calls
initialize function):
extern(C) void initialize() {
import core.runtime;
Runtime.initialize;
frop();
}
void frop() {
import core.thread;
Dynamic obj = new Dynamic;
for (size_t i; i!=200; ++i) {
obj.rehash();
}
void foo() {
for (size_t i; i!=200; ++i) {
import std.stdio;
writeln(i);
obj.rehash(); // segfault happens in the second iteration of loop
obj.proc();
}
}
Thread bar = new Thread(&foo);
bar.start();
bar.join();
}
final class Hash {
private Dynamic[Dynamic] _m_map;
public void clear() {
// only static instance of Hash is used
// no synchronized region required -- but still
synchronized(this) {
_m_map = null;
}
}
}
class Dynamic {
void rehash () {
// only thread local variables no synchronized required --
but still
synchronized(this) {
static Hash hash ;
if(hash is null) hash = new Hash;
hash.clear();
}
}
void proc () {
// only stack variables, so no synchronized required -- but
still
synchronized(this) {
char[] space;
space.length = 5000;
}
}
}
// Regards
// - Puneet
More information about the Digitalmars-d
mailing list