kater
31-12-2008, 12:52
Hai,
gestern habe ich mein neues Primzahlenbild fertig bekommen, habe es hochgeladen und wollte es mir mit dem FF3 unter Linux anschauen. Nur leider stürzt er dabei ab. Unter Windows nicht. :) Also hab ich mit den gdb debuger geschnappt und es auch geschafft ein brauchbares backtrace nach 3h zu erzeugen.
Das Bild ist übrigends sehr groß, 50000 Pixel in der Höhe, da steigen schon ein paar Bildbetrachter aus :)
Nun, ich will euch hier nicht den backtrace aufhalsen, da bestimmt kein X-Windows Entwickler hier ist, aber ich habe die Funktion isoliert, wo der Fehler wahrscheinlich auftritt.
Pixmap XCreatePixmap (
register Display *dpy,
Drawable d,
unsigned int width,
unsigned int height,
unsigned int depth)
{
Pixmap pid;
register xCreatePixmapReq *req;
LockDisplay(dpy);
GetReq(CreatePixmap, req);
req->drawable = d;
req->width = width;
req->height = height;
req->depth = depth;
pid = req->pid = XAllocID(dpy);
UnlockDisplay(dpy);
SyncHandle();
#ifdef USE_DYNAMIC_XCURSOR
if (depth == 1)
_XNoticeCreateBitmap (dpy, pid, width, height);
#endif
return (pid);
}
In der Variable height sind wahrscheinlich die 50000 drinne. Die konnte ich aber nicht mit dem debuger aufrufen, da wegoptimiert. Ja, ich vermisse irgendwie die Funktion, wo das Pixmap erzeugt wird. Ich kenne das so, dass man in eine Variable, hier req die Abmessungen des Bildes etc. reinschreib, diese Variable dann einer createPixmax() übergibt, und die liefert einem dann das "Bild".
Nur hier ist das anders. Laut debuger ruft er SyncHandle() auf, welche dann die Error Behandlungsfunktionen aufruft. Aber die eigentliche Stelle wo der Fehler auftritt, ein BadAlloc (Das Bild ist aber auch gross um dem geht wohl der Speicher aus), die sehe ich nicht.
Das Programm läuft aber auch in 2 weiteren Threats. Aber wie ich das mit dem Debuger behandeln kann, weiss ich auch nicht. Das ist das erstemal, dass ich einen debuger benutze und bin schon erstaut wie weit ich bisher kam.
Hat jemand eine Idee, wie oder wo ich hier weiter machen kann?
Das System ist ein Debian testing und das Bild findet ihr hier
geeksden.sf.net/testbild.png aber Vorsicht, der Browser kann wirklich abstürzen ;)
Die libpng steigt mit einem CRC Error aus, aber die wird hier glaube ich nicht benutzt.
Grüße und coolen Rutsch :)
gestern habe ich mein neues Primzahlenbild fertig bekommen, habe es hochgeladen und wollte es mir mit dem FF3 unter Linux anschauen. Nur leider stürzt er dabei ab. Unter Windows nicht. :) Also hab ich mit den gdb debuger geschnappt und es auch geschafft ein brauchbares backtrace nach 3h zu erzeugen.
Das Bild ist übrigends sehr groß, 50000 Pixel in der Höhe, da steigen schon ein paar Bildbetrachter aus :)
Nun, ich will euch hier nicht den backtrace aufhalsen, da bestimmt kein X-Windows Entwickler hier ist, aber ich habe die Funktion isoliert, wo der Fehler wahrscheinlich auftritt.
Pixmap XCreatePixmap (
register Display *dpy,
Drawable d,
unsigned int width,
unsigned int height,
unsigned int depth)
{
Pixmap pid;
register xCreatePixmapReq *req;
LockDisplay(dpy);
GetReq(CreatePixmap, req);
req->drawable = d;
req->width = width;
req->height = height;
req->depth = depth;
pid = req->pid = XAllocID(dpy);
UnlockDisplay(dpy);
SyncHandle();
#ifdef USE_DYNAMIC_XCURSOR
if (depth == 1)
_XNoticeCreateBitmap (dpy, pid, width, height);
#endif
return (pid);
}
In der Variable height sind wahrscheinlich die 50000 drinne. Die konnte ich aber nicht mit dem debuger aufrufen, da wegoptimiert. Ja, ich vermisse irgendwie die Funktion, wo das Pixmap erzeugt wird. Ich kenne das so, dass man in eine Variable, hier req die Abmessungen des Bildes etc. reinschreib, diese Variable dann einer createPixmax() übergibt, und die liefert einem dann das "Bild".
Nur hier ist das anders. Laut debuger ruft er SyncHandle() auf, welche dann die Error Behandlungsfunktionen aufruft. Aber die eigentliche Stelle wo der Fehler auftritt, ein BadAlloc (Das Bild ist aber auch gross um dem geht wohl der Speicher aus), die sehe ich nicht.
Das Programm läuft aber auch in 2 weiteren Threats. Aber wie ich das mit dem Debuger behandeln kann, weiss ich auch nicht. Das ist das erstemal, dass ich einen debuger benutze und bin schon erstaut wie weit ich bisher kam.
Hat jemand eine Idee, wie oder wo ich hier weiter machen kann?
Das System ist ein Debian testing und das Bild findet ihr hier
geeksden.sf.net/testbild.png aber Vorsicht, der Browser kann wirklich abstürzen ;)
Die libpng steigt mit einem CRC Error aus, aber die wird hier glaube ich nicht benutzt.
Grüße und coolen Rutsch :)