PDA

View Full Version : [PYTHON] *** glibc detected *** python: free(): invalid pointer: 0xb7d99910 ***


maforast
22-05-2007, 13:05
Salve a tutti ho un errore quando chiamo sys.exit() in un programma python che mi crea non pochi problemi

l'errore è il seguente

*** glibc detected *** python: free(): invalid pointer: 0xb7d99910 ***

Qualcuno sa a cosa è dovuto?

marco.r
22-05-2007, 15:50
potrebbe essere un bug in un qualche modulo scritto in C...
che librerie/moduli stai usando ?

maforast
22-05-2007, 16:05
potrebbe essere un bug in un qualche modulo scritto in C...
che librerie/moduli stai usando ?

Il modulo che mi crea quell'errore è il pyv4l cioè quando faccio

import v4l

da precisare che questo è il modulo ottenuto compilando pyv4l cioè v4l.c ho scoperto anche il punto all'interno del codice v4l.c precisamente riga 820


v4l_setupCapture(videoobject *self) {
if (ioctl(self->fd, VIDIOCGMBUF, &self->mbuf) < 0) return -1;
//fprintf(stderr," mbuf: size=%d frames=%d\n", self->mbuf.size,self->mbuf.frames);
self->map = mmap(0, self->mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, self->fd, 0);
//self->map = mmap(0, self->mbuf.size, PROT_READ, MAP_PRIVATE, self->fd, 0);
if ((self->map == NULL) | (self->map == MAP_FAILED)) {
PyErr_SetString(VideoError, "Error Memory Mapping device.");
return -1;
}


ho dovuto commentare questa parte perkè altrimenti il modulo dava errore quando veniva caricato //self->map = mmap(0, self->mbuf.size, PROT_READ, MAP_PRIVATE, self->fd, 0);

e ho decommentato quest'altra parta

self->map = mmap(0, self->mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, self->fd, 0);

in pratica ho dovuto mettere MAP_SHARED al posto di MAP_PRIVATE ed è questo che mi crea il problema glibc ma purtroppo se lascio MAP_PRIVATE ottengo un errore che non mi fa partire nemmeno il codice

il fatto è che su ubuntu dapper questo errore non me lo da ma su feasty sì

che pazienza che ci vuole ....

ilsensine
22-05-2007, 17:37
Il modulo che mi crea quell'errore è il pyv4l cioè quando faccio

import v4l

da precisare che questo è il modulo ottenuto compilando pyv4l cioè v4l.c ho scoperto anche il punto all'interno del codice v4l.c precisamente riga 820


v4l_setupCapture(videoobject *self) {
if (ioctl(self->fd, VIDIOCGMBUF, &self->mbuf) < 0) return -1;
//fprintf(stderr," mbuf: size=%d frames=%d\n", self->mbuf.size,self->mbuf.frames);
self->map = mmap(0, self->mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, self->fd, 0);
//self->map = mmap(0, self->mbuf.size, PROT_READ, MAP_PRIVATE, self->fd, 0);
if ((self->map == NULL) | (self->map == MAP_FAILED)) {
PyErr_SetString(VideoError, "Error Memory Mapping device.");
return -1;
}


ho dovuto commentare questa parte perkè altrimenti il modulo dava errore quando veniva caricato //self->map = mmap(0, self->mbuf.size, PROT_READ, MAP_PRIVATE, self->fd, 0);

e ho decommentato quest'altra parta

self->map = mmap(0, self->mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, self->fd, 0);

in pratica ho dovuto mettere MAP_SHARED al posto di MAP_PRIVATE ed è questo che mi crea il problema glibc ma purtroppo se lascio MAP_PRIVATE ottengo un errore che non mi fa partire nemmeno il codice

il fatto è che su ubuntu dapper questo errore non me lo da ma su feasty sì

che pazienza che ci vuole ....
Credo che il bug sia altrove; facento 1+1 azzarderei che sta tentando una free() su memoria ottenuta con mmap. Mortale.

Riguardo la modifica MAP_PRIVATE -> MAP_SHARED, è un bug genuino che hai corretto. Ora scova la free e cambiala con la munmap.

Nota che l'elenco dei bug non finisce qui; eccone un'altro (innocuo):

if ((self->map == NULL) | (self->map == MAP_FAILED)) {

Credo che quel codice sia stato scritto un pò alla carlona. Non fidarti.

ilsensine
22-05-2007, 17:38
Nota infine che quel codice usa le vecchie API V4L1; alcuni device ormai supportano solo le V4L2.

ilsensine
22-05-2007, 17:46
Ora scova la free e cambiala con la munmap.
Umm non sono sicuro che sia così; 0xb7d99910 non è un indirizzo ottenibile con mmap (non è allineato alla pagina). Probabilmente si tratta di un bug diverso, forse un doppio free o un puntatore selvaggio. Forse valgrind può dirti di più.

maforast
23-05-2007, 09:16
Umm non sono sicuro che sia così; 0xb7d99910 non è un indirizzo ottenibile con mmap (non è allineato alla pagina). Probabilmente si tratta di un bug diverso, forse un doppio free o un puntatore selvaggio. Forse valgrind può dirti di più.

Grazie tra un pò vado a vedere le cose ke mi hai detto ma dove sono riportati i bugs che mi hai scritto sopra? E come faccio ad utilizzare il v4l2? Io in rete ho trovato solo questo modulo per python che si interfaccia con il v4l ed in effetti è un pò vecchiotto visto che non viene aggiornato dal 2005


cmq grazie 1000

ilsensine
23-05-2007, 09:18
Grazie tra un pò vado a vedere le cose ke mi hai detto ma dove sono riportati i bugs che mi hai scritto sopra?
...?
E come faccio ad utilizzare il v4l2?
...riscrivi il modulo :D

maforast
23-05-2007, 09:35
Umm non sono sicuro che sia così; 0xb7d99910 non è un indirizzo ottenibile con mmap (non è allineato alla pagina). Probabilmente si tratta di un bug diverso, forse un doppio free o un puntatore selvaggio. Forse valgrind può dirti di più.

Non ho capito bene un paio di cose:
1 come hai fatto a capire che quell'indirizzo di memoria non è ottenibile da mmap e 2 se devo ancora cambiare free con munmap...

rifare io il modulo v4l2 lol bellissima questa :) ma non c'è che tu sappia un altro modulo pyv4l + aggiornato?

maforast
23-05-2007, 10:05
Non ho capito bene un paio di cose:
1 come hai fatto a capire che quell'indirizzo di memoria non è ottenibile da mmap e 2 se devo ancora cambiare free con munmap...

rifare io il modulo v4l2 lol bellissima questa :) ma non c'è che tu sappia un altro modulo pyv4l + aggiornato?

Ho provato a sostituire munmap con free ma quando compilo mi viene detto

v4l.c:1323: error: too few arguments to function ‘munmap’

quindi ho rimesso free

non ho capito bene inoltre a che big ti riferisci in questa riga

if ((self->map == NULL) | (self->map == MAP_FAILED)) {

ilsensine
23-05-2007, 10:41
Non ho capito bene un paio di cose:
1 come hai fatto a capire che quell'indirizzo di memoria non è ottenibile da mmap
Non è allineato alla pagina
e 2 se devo ancora cambiare free con munmap...
Non credo. Per me dovresti eseguire python sotto gdb e fargli interpretare il tuo script; in corrispondenza della free() incriminata verrà generato un abort che gdb intercetterà. Con "where" potrai risalire alla free() all'interno dei sorgenti, ammesso che python e le librerie siano compilate con i simboli di debug.

rifare io il modulo v4l2 lol bellissima questa :) ma non c'è che tu sappia un altro modulo pyv4l + aggiornato?
Non uso python, non ho idea. Comunque con V4L1 copri quasi tutti i dispositivi, anche perché molti V4L2 offrono uno strato di compatibilità con V4L1.
Ho provato a sostituire munmap con free ma quando compilo mi viene detto

v4l.c:1323: error: too few arguments to function ‘munmap’
Certo munmap vuole anche la dimensione della regione.
Prima che fai ulteriori danni, quale free() stai toccando? Qualche riga di codice?

non ho capito bene inoltre a che big ti riferisci in questa riga
1) occorre testare solo con MAP_FAILED
2) e comunque "|" -> "||"
In ogni caso è innoquo, non cambia la funzionalità.

maforast
23-05-2007, 11:07
Non è allineato alla pagina

Non credo. Per me dovresti eseguire python sotto gdb e fargli interpretare il tuo script; in corrispondenza della free() incriminata verrà generato un abort che gdb intercetterà. Con "where" potrai risalire alla free() all'interno dei sorgenti, ammesso che python e le librerie siano compilate con i simboli di debug.


il debug mi dice che non riesce a trovare simboli di debug


Certo munmap vuole anche la dimensione della regione.
Prima che fai ulteriori danni, quale free() stai toccando? Qualche riga di codice?


ho modificato la riga 982
free( self->conversion_buffer.data );

e la riga 1323
free(self->conversion_buffer.data);

del v4l.c che sta nel pacchetto pyv4l

ilsensine
23-05-2007, 11:15
ho modificato la riga 982
free( self->conversion_buffer.data );

e la riga 1323
free(self->conversion_buffer.data);

Lasciale stare, credo siano corrette così come sono.

il debug mi dice che non riesce a trovare simboli di debug
ubuntu non fornisce le versioni dbg di phyton e librerie?
Nota che basterebbero i simboli di debug del modulo che contiene la free() incriminata, a sapere di quale si tratta. C'è un modo per saperlo, comunque.

maforast
23-05-2007, 12:02
ubuntu non fornisce le versioni dbg di phyton e librerie?
Nota che basterebbero i simboli di debug del modulo che contiene la free() incriminata, a sapere di quale si tratta. C'è un modo per saperlo, comunque.

sì le fornisce... ma non ho proprio idea di quale modulo mi serve per il debug e su quale file lo devo andare a fare io ho provato facendo dbg python Main.py e mi ha dato l'errore che ti ho postato prima

ilsensine
23-05-2007, 12:16
sì le fornisce... ma non ho proprio idea di quale modulo mi serve per il debug e su quale file lo devo andare a fare io ho provato facendo dbg python Main.py e mi ha dato l'errore che ti ho postato prima
Allora scoviamo il modulo incriminato.
Devi fare così; innanzitutto devi ottenere il backtrace della free tramite gdb:


gdb python
(gdb) set args Main.py
(gdb) run
...esecuzione del programma...
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0x<indirizzo> ***
Program received signal SIGABRT, Aborted.
0x<indirizzo> in raise () from /lib/libc.so.6
(gdb) where
...backtrace...

A questo punto devi esaminare il backtrace. Probabilmente otterrai qualcosa di questo genere:

(gdb) where
#0 0x.... in raise () from /lib/libc.so.6
#1 0x.... in abort () from /lib/libc.so.6
#2 0x.... in __libc_message () from /lib/libc.so.6
#3 0x.... in _int_free () from /lib/libc.so.6
#4 0x.... in free () from /lib/libc.so.6
#5 0x<INDIRIZZO> in ??? ()
#6 ecc.

Quello che ti interessa è la riga dopo la free(), prendi nota dell'indirizzo mostrato. Se c'è qualche simbolo di debug disponibile, i "???" potrebbero essere il nome della funzione, oppure addirittura il nome del file sorgente e la riga.
Senza chiudere gdb, apri un'altra console ed esegui
pidof python
Ti verrà restituito un numero, il pid del processo. Esamina quindi la sua mappa di memoria:
cat /proc/[pid restituito da pidof]/maps
e sarai in grado di associare l'indirizzo mostrato da gdb alla libreria corrispondente.

maforast
23-05-2007, 12:50
Allora scoviamo il modulo incriminato.
Devi fare così; innanzitutto devi ottenere il backtrace della free tramite gdb:


gdb python
(gdb) set args Main.py
(gdb) run
...esecuzione del programma...
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0x<indirizzo> ***
Program received signal SIGABRT, Aborted.
0x<indirizzo> in raise () from /lib/libc.so.6
(gdb) where
...backtrace...

A questo punto devi esaminare il backtrace. Probabilmente otterrai qualcosa di questo genere:

(gdb) where
#0 0x.... in raise () from /lib/libc.so.6
#1 0x.... in abort () from /lib/libc.so.6
#2 0x.... in __libc_message () from /lib/libc.so.6
#3 0x.... in _int_free () from /lib/libc.so.6
#4 0x.... in free () from /lib/libc.so.6
#5 0x<INDIRIZZO> in ??? ()
#6 ecc.

Quello che ti interessa è la riga dopo la free(), prendi nota dell'indirizzo mostrato. Se c'è qualche simbolo di debug disponibile, i "???" potrebbero essere il nome della funzione, oppure addirittura il nome del file sorgente e la riga.
Senza chiudere gdb, apri un'altra console ed esegui
pidof python
Ti verrà restituito un numero, il pid del processo. Esamina quindi la sua mappa di memoria:
cat /proc/[pid restituito da pidof]/maps
e sarai in grado di associare l'indirizzo mostrato da gdb alla libreria corrispondente.

si è bloccato qui il dbg


(gdb) set args Main3.py
(gdb) run
Starting program: /usr/bin/python Main3.py
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
[New Thread -1210136896 (LWP 11557)]
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
---Type <return> to continue, or q <return> to quit---
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
281.jpeg
93.2330827068
93.984962406
94.7368421053



- TSBD2: 94.7368421053
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0xb7dd3910 ***



proprio come mi capita quando lo lancio normalmente cioè non riesce a ridare il controllo al terminale a patto che non faccia ctrl+c

maforast
23-05-2007, 12:52
- TSBD2: 94.7368421053
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0xb7dd3910 ***





quel TSBD2 è il risultato del mio programma dpodikè dovrebbe terminare con sys.exit()

maforast
23-05-2007, 12:55
- TSBD2: 94.7368421053
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0xb7dd3910 ***
a questo punto ho fatto ctrl+c ed ho ottenuto

Program received signal SIGINT, Interrupt.
[Switching to Thread -1210136896 (LWP 11557)]
0xffffe410 in __kernel_vsyscall ()


poi ho fatto where ed ho ottenuto
(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7eca05e in ?? () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7e598fe in ?? () from /lib/tls/i686/cmov/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

maforast
23-05-2007, 12:58
a questo punto ho fatto ctrl+c ed ho ottenuto

Program received signal SIGINT, Interrupt.
[Switching to Thread -1210136896 (LWP 11557)]
0xffffe410 in __kernel_vsyscall ()


poi ho fatto where ed ho ottenuto
(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7eca05e in ?? () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7e598fe in ?? () from /lib/tls/i686/cmov/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)


Dando ctrl +c in quel punto non mi da + la l'indirizzo di memoria relativo a free ma credo a quello generato da ctrl+c infatti free non compare ... mmmmmm :muro: :muro: :muro: :muro: :muro: :muro:

ilsensine
23-05-2007, 14:03
si è bloccato qui il dbg


(gdb) set args Main3.py
(gdb) run
<snip>
- TSBD2: 94.7368421053
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0xb7dd3910 ***



proprio come mi capita quando lo lancio normalmente cioè non riesce a ridare il controllo al terminale a patto che non faccia ctrl+c
Qualcosa non va, le libc dovrebbero generare un abort.

maforast
23-05-2007, 14:07
Qualcosa non va, le libc dovrebbero generare un abort.


lo credo anche io anche perkè in ubuntu dapper questo problema non me lo dava evidentemente c'è qualke problema con una libreria nuova della versione feisty

ilsensine
23-05-2007, 14:09
Fai così:
export MALLOC_CHECK_=3
e ripeti il gdb, sulla stessa console. Ora dovrebbe generare il SIGABRT.

(occhio che MALLOC_CHECK_ è proprio come l'ho scritto, con "_" alla fine)

maforast
23-05-2007, 14:44
Fai così:
export MALLOC_CHECK_=3
e ripeti il gdb, sulla stessa console. Ora dovrebbe generare il SIGABRT.

(occhio che MALLOC_CHECK_ è proprio come l'ho scritto, con "_" alla fine)

Fatto poi mi spieghi come fai a sapere ste cose... lol

maforast@Trade:/media/disk/wisard+client$ export MALLOC_CHECK_=3
maforast@Trade:/media/disk/wisard+client$ gdb python
malloc: using debugging hooks
GNU gdb 6.6-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(no debugging symbols found)
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) set args Main3.py
(gdb) run
Starting program: /usr/bin/python Main3.py
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
[New Thread -1210800448 (LWP 14645)]
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
malloc: using debugging hooks
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
---Type <return> to continue, or q <return> to quit---
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
281.jpeg
93.2330827068
93.984962406
94.7368421053



- TSBD2: 94.7368421053
*** glibc detected *** /usr/bin/python: free(): invalid pointer: 0xb7d31910 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7db61ea]
/lib/tls/i686/cmov/libc.so.6(cfree+0x35)[0xb7db6dd5]
/usr/lib/python2.5/site-packages/v4l.so[0xb67b7e3d]
/usr/bin/python[0x808683f]
/usr/lib/python2.5/site-packages/sip.so[0xb7edd0ef]
/usr/lib/python2.5/site-packages/sip.so[0xb7ee059f]
/usr/bin/python[0x809bc19]
/usr/bin/python[0x8085269]
/usr/bin/python(PyDict_SetItem+0x6e)[0x8086bae]
/usr/bin/python(_PyModule_Clear+0x158)[0x8088808]
/usr/bin/python(PyImport_Cleanup+0x153)[0x80dcc63]
/usr/bin/python(Py_Finalize+0xbf)[0x80e8e5f]
/usr/bin/python[0x80e89aa]
/usr/bin/python(PyErr_PrintEx+0x195)[0x80e8ba5]
/usr/bin/python(PyRun_SimpleFileExFlags+0xe3)[0x80e93c3]
/usr/bin/python(Py_Main+0x9c0)[0x8059330]
/usr/bin/python(main+0x22)[0x8058862]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xdc)[0xb7d61ebc]
/usr/bin/python[0x80587b1]
======= Memory map: ========
08048000-0813f000 r-xp 00000000 08:06 587223 /usr/bin/python2.5
0813f000-08164000 rw-p 000f6000 08:06 587223 /usr/bin/python2.5
08164000-082ae000 rw-p 08164000 00:00 0 [heap]
b66d5000-b66d6000 rw-p b66d5000 00:00 0
b66d7000-b679a000 rw-p b66d7000 00:00 0
b679a000-b679e000 r-xp 00000000 08:06 587689 /usr/lib/libXxf86dga.so.1.0.0
b679e000-b679f000 rw-p 00004000 08:06 587689 /usr/lib/libXxf86dga.so.1.0.0
b67b0000-b67b3000 r-xp 00000000 08:06 701792 /usr/lib/python2.5/lib-dynload/mmap.so
b67b3000-b67b4000 rw-p 00003000 08:06 701792 /usr/lib/python2.5/lib-dynload/mmap.so
b67b4000-b67b9000 r-xp 00000000 08:06 818652 /usr/lib/python2.5/site-packages/v4l.so
b67b9000-b67bb000 rw-p 00005000 08:06 818652 /usr/lib/python2.5/site-packages/v4l.so
b67bb000-b67bd000 rw-p b67bb000 00:00 0
b67bd000-b67bf000 r-xp 00000000 08:06 701765 /usr/lib/python2.5/lib-dynload/_random.so
b67bf000-b67c0000 rw-p 00002000 08:06 701765 /usr/lib/python2.5/lib-dynload/_random.so
b67c0000-b67c4000 r-xp 00000000 08:06 701774 /usr/lib/python2.5/lib-dynload/binascii.so
b67c4000-b67c5000 rw-p 00003000 08:06 701774 /usr/lib/python2.5/lib-dynload/binascii.so
b67c5000-b67c8000 r-xp 00000000 08:06 701791 /usr/lib/python2.5/lib-dynload/math.so
b67c8000-b67c9000 rw-p 00002000 08:06 701791 /usr/lib/python2.5/lib-dynload/math.so
b67c9000-b67ce000 r-xp 00000000 08:06 701769 /usr/lib/python2.5/lib-dynload/_struct.so
b67ce000-b67cf000 rw-p 00005000 08:06 701769 /usr/lib/python2.5/lib-dynload/_struct.so
b67cf000-b67d4000 r-xp 00000000 08:06 701794 /usr/lib/python2.5/lib-dynload/operator.so
b67d4000-b67d5000 rw-p 00005000 08:06 701794 /usr/lib/python2.5/lib-dynload/operator.so
b67d5000-b67db000 r-xp 00000000 08:06 701772 /usr/lib/python2.5/lib-dynload/array.so
b67db000-b67dd000 rw-p 00006000 08:06 701772 /usr/lib/python2.5/lib-dynload/array.so
b67dd000-b680f000 r-xp 00000000 08:06 978752 /usr/lib/python2.5/site-packages/PIL/_imaging.so
b680f000-b6812000 rw-p 00032000 08:06 978752 /usr/lib/python2.5/site-packages/PIL/_imaging.so
b6812000-b685b000 rw-p b6812000 00:00 0
b685b000-b685f000 r-xp 00000000 08:06 587659 /usr/lib/libXfixes.so.3.1.0
b685f000-b6860000 rw-p 00003000 08:06 587659 /usr/lib/libXfixes.so.3.1.0
b6860000-b687e000 r-xp 00000000 08:06 587838 /usr/lib/libexpat.so.1.0.0
b687e000-b6880000 rw-p 0001d000 08:06 587838 /usr/lib/libexpat.so.1.0.0
b6880000-b6884000 r-xp 00000000 08:06 587653 /usr/lib/libXdmcp.so.6.0.0
b6884000-b6885000 rw-p 00003000 08:06 587653 /usr/lib/libXdmcp.so.6.0.0
b6885000-b6887000 r-xp 00000000 08:06 587642 /usr/lib/libXau.so.6.0.0
b6887000-b6888000 rw-p 00001000 08:06 587642 /usr/lib/libXau.so.6.0.0
b6888000-b689d000 r-xp 00000000 08:06 587614 /usr/lib/libICE.so.6.3.0
b689d000-b689f000 rw-p 00014000 08:06 587614 /usr/lib/libICE.so.6.3.0
b689f000-b68a0000 rw-p b689f000 00:00 0
b68a0000-b68a8000 r-xp 00000000 08:06 587632 /usr/lib/libSM.so.6.0.0
b68a8000-b68a9000 rw-p 00007000 08:06 587632 /usr/lib/libSM.so.6.0.0
b68a9000-b6911000 r-xp 00000000 08:06 587854 /usr/lib/libfreetype.so.6.3.10
b6911000-b6914000 rw-p 00068000 08:06 587854 /usr/lib/libfreetype.so.6.3.10
b6914000-b6925000 r-xp 00000000 08:06 587663 /usr/lib/libXft.so.2.1.2
b6925000-b6926000 rw-p 00010000 08:06 587663 /usr/lib/libXft.so.2.1.2
b6926000-b6928000 r-xp 00000000 08:06 587667 /usr/lib/libXinerama.so.1.0.0
b6928000-b6929000 rw-p 00001000 08:06 587667 /usr/lib/libXinerama.so.1.0.0
b6929000-b6931000 r-xp 00000000 08:06 587649 /usr/lib/libXcursor.so.1.0.2
b6931000-b6932000 rw-p 00007000 08:06 587649 /usr/lib/libXcursor.so.1.0.2
b6932000-b6937000 r-xp 00000000 08:06 587677 /usr/lib/libXrandr.so.2.1.0
b6937000-b6938000 rw-p 00005000 08:06 587677 /usr/lib/libXrandr.so.2.1.0
b6938000-b693f000 r-xp 00000000 08:06 587679 /usr/lib/libXrender.so.1.3.0
b693f000-b6940000 rw-p 00006000 08:06 587679 /usr/lib/libXrender.so.1.3.0
b6940000-b6947000 r-xp 00000000 08:06 587665 /usr/lib/libXi.so.6.0.0
b6947000-b6948000 rw-p 00006000 08:06 587665 /usr/lib/libXi.so.6.0.0
b6948000-b695b000 r-xp 00000000 08:06 588397 /usr/lib/libz.so.1.2.3
b695b000-b695c000 rw-p 00012000 08:06 588397 /usr/lib/libz.so.1.2.3
b695c000-b697e000 r-xp 00000000 08:06 588251 /usr/lib/libpng12.so.0.15.0
b697e000-b697f000 rw-p 00021000 08:06 588251 /usr/lib/libpng12.so.0.15.0
b697f000-b699d000 r-xp 00000000 08:06 588120 /usr/lib/libjpeg.so.62.0.0
b699d000-b699e000 rw-p 0001d000 08:06 588120 /usr/lib/libjpeg.so.62.0.0
b699e000-b69eb000 r-xp 00000000 08:06 587683 /usr/lib/libXt.so.6.0.0
b69eb000-b69ef000 rw-p 0004c000 08:06 587683 /usr/lib/libXt.so.6.0.0
b69ef000-b6a04000 r-xp 00000000 08:06 587717 /usr/lib/libaudio.so.2.4
b6a04000-b6a05000 rw-p 00015000 08:06 587717 /usr/lib/libaudio.so.2.4
b6a05000-b6a28000 r-xp 00000000 08:06 587844 /usr/lib/libfontconfig.so.1.2.0
b6a28000-b6a30000 rw-p 00023000 08:06 587844 /usr/lib/libfontconfig.so
Program received signal SIGABRT, Aborted.
[Switching to Thread -1210800448 (LWP 14645)]
0xffffe410 in __kernel_vsyscall ()




poi faccio where ed ottengo

(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7d75df0 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7d77641 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0xb7dab9bb in ?? () from /lib/tls/i686/cmov/libc.so.6
#4 0x00000007 in ?? ()
#5 0xbfa3d0e4 in ?? ()
#6 0x00000400 in ?? ()
#7 0xb7e727a8 in ?? () from /lib/tls/i686/cmov/libc.so.6
#8 0x00000017 in ?? ()
#9 0xbfa3f995 in ?? ()
#10 0x0000000f in ?? ()
#11 0xb7e727c1 in ?? () from /lib/tls/i686/cmov/libc.so.6
#12 0x00000002 in ?? ()
#13 0xb7e6f7d4 in ?? () from /lib/tls/i686/cmov/libc.so.6
#14 0x00000017 in ?? ()
#15 0xb7e727c5 in ?? () from /lib/tls/i686/cmov/libc.so.6
#16 0x00000004 in ?? ()
#17 0xbfa3d61b in ?? ()
#18 0x00000008 in ?? ()
#19 0xb7e727cb in ?? () from /lib/tls/i686/cmov/libc.so.6
#20 0x00000005 in ?? ()
#21 0xb8b08ac8 in ?? ()
#22 0xb7d0fcf0 in ?? ()
#23 0x0000007f in ?? ()
#24 0xb7cf3521 in ?? ()
#25 0x08254398 in ?? ()
#26 0xb8b08ac8 in ?? ()
#27 0xb7e727cb in ?? () from /lib/tls/i686/cmov/libc.so.6
#28 0x00000005 in ?? ()
#29 0xbfa3d030 in ?? ()
#30 0x00000025 in ?? ()
#31 0xb677802c in ?? ()
#32 0xb7d0fcf0 in ?? ()
#33 0xb8b08ac8 in ?? ()
#34 0xffffffff in ?? ()
#35 0xbfa3d61b in ?? ()
#36 0x00000008 in ?? ()
#37 0xbfa3d040 in ?? ()
#38 0x00000000 in ?? ()
(gdb)


mi pare che non c'è traccia di free

se invece do semplicemente Python Main3.py ottengo



maforast@Trade:/media/disk/wisard+client$ python Main3.py
malloc: using debugging hooks
281.jpeg
93.2330827068
93.984962406
94.7368421053



- TSBD2: 94.7368421053
*** glibc detected *** python: free(): invalid pointer: 0xb7d4b910 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7dd01ea]
/lib/tls/i686/cmov/libc.so.6(cfree+0x35)[0xb7dd0dd5]
/usr/lib/python2.5/site-packages/v4l.so[0xb67d2e3d]
python[0x808683f]
/usr/lib/python2.5/site-packages/sip.so[0xb7ef70ef]
/usr/lib/python2.5/site-packages/sip.so[0xb7efa59f]
python[0x809bc19]
python[0x8085269]
python(PyDict_SetItem+0x6e)[0x8086bae]
python(_PyModule_Clear+0x158)[0x8088808]
python(PyImport_Cleanup+0x153)[0x80dcc63]
python(Py_Finalize+0xbf)[0x80e8e5f]
python[0x80e89aa]
python(PyErr_PrintEx+0x195)[0x80e8ba5]
python(PyRun_SimpleFileExFlags+0xe3)[0x80e93c3]
python(Py_Main+0x9c0)[0x8059330]
python(main+0x22)[0x8058862]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xdc)[0xb7d7bebc]
python[0x80587b1]
======= Memory map: ========
08048000-0813f000 r-xp 00000000 08:06 587223 /usr/bin/python2.5
0813f000-08164000 rw-p 000f6000 08:06 587223 /usr/bin/python2.5
08164000-082b4000 rw-p 08164000 00:00 0 [heap]
b66f0000-b66f1000 rw-p b66f0000 00:00 0
b66f2000-b67b5000 rw-p b66f2000 00:00 0
b67b5000-b67b9000 r-xp 00000000 08:06 587689 /usr/lib/libXxf86dga.so.1.0.0
b67b9000-b67ba000 rw-p 00004000 08:06 587689 /usr/lib/libXxf86dga.so.1.0.0
b67ca000-b67cd000 r-xp 00000000 08:06 701792 /usr/lib/python2.5/lib-dynload/mmap.so
b67cd000-b67ce000 rw-p 00003000 08:06 701792 /usr/lib/python2.5/lib-dynload/mmap.so
b67cf000-b67d4000 r-xp 00000000 08:06 818652 /usr/lib/python2.5/site-packages/v4l.so
b67d4000-b67d6000 rw-p 00005000 08:06 818652 /usr/lib/python2.5/site-packages/v4l.so
b67d6000-b67d8000 rw-p b67d6000 00:00 0
b67d8000-b67da000 r-xp 00000000 08:06 701765 /usr/lib/python2.5/lib-dynload/_random.so
b67da000-b67db000 rw-p 00002000 08:06 701765 /usr/lib/python2.5/lib-dynload/_random.so
b67db000-b67df000 r-xp 00000000 08:06 701774 /usr/lib/python2.5/lib-dynload/binascii.so
b67df000-b67e0000 rw-p 00003000 08:06 701774 /usr/lib/python2.5/lib-dynload/binascii.so
b67e0000-b67e3000 r-xp 00000000 08:06 701791 /usr/lib/python2.5/lib-dynload/math.so
b67e3000-b67e4000 rw-p 00002000 08:06 701791 /usr/lib/python2.5/lib-dynload/math.so
b67e4000-b67e9000 r-xp 00000000 08:06 701769 /usr/lib/python2.5/lib-dynload/_struct.so
b67e9000-b67ea000 rw-p 00005000 08:06 701769 /usr/lib/python2.5/lib-dynload/_struct.so
b67ea000-b67ef000 r-xp 00000000 08:06 701794 /usr/lib/python2.5/lib-dynload/operator.so
b67ef000-b67f0000 rw-p 00005000 08:06 701794 /usr/lib/python2.5/lib-dynload/operator.so
b67f0000-b67f6000 r-xp 00000000 08:06 701772 /usr/lib/python2.5/lib-dynload/array.so
b67f6000-b67f8000 rw-p 00006000 08:06 701772 /usr/lib/python2.5/lib-dynload/array.so
b67f8000-b682a000 r-xp 00000000 08:06 978752 /usr/lib/python2.5/site-packages/PIL/_imaging.so
b682a000-b682d000 rw-p 00032000 08:06 978752 /usr/lib/python2.5/site-packages/PIL/_imaging.so
b682d000-b6876000 rw-p b682d000 00:00 0
b6876000-b687a000 r-xp 00000000 08:06 587659 /usr/lib/libXfixes.so.3.1.0
b687a000-b687b000 rw-p 00003000 08:06 587659 /usr/lib/libXfixes.so.3.1.0
b687b000-b6899000 r-xp 00000000 08:06 587838 /usr/lib/libexpat.so.1.0.0
b6899000-b689b000 rw-p 0001d000 08:06 587838 /usr/lib/libexpat.so.1.0.0
b689b000-b689f000 r-xp 00000000 08:06 587653 /usr/lib/libXdmcp.so.6.0.0
b689f000-b68a0000 rw-p 00003000 08:06 587653 /usr/lib/libXdmcp.so.6.0.0
b68a0000-b68a2000 r-xp 00000000 08:06 587642 /usr/lib/libXau.so.6.0.0
b68a2000-b68a3000 rw-p 00001000 08:06 587642 /usr/lib/libXau.so.6.0.0
b68a3000-b68b8000 r-xp 00000000 08:06 587614 /usr/lib/libICE.so.6.3.0
b68b8000-b68ba000 rw-p 00014000 08:06 587614 /usr/lib/libICE.so.6.3.0
b68ba000-b68bb000 rw-p b68ba000 00:00 0
b68bb000-b68c3000 r-xp 00000000 08:06 587632 /usr/lib/libSM.so.6.0.0
b68c3000-b68c4000 rw-p 00007000 08:06 587632 /usr/lib/libSM.so.6.0.0
b68c4000-b692c000 r-xp 00000000 08:06 587854 /usr/lib/libfreetype.so.6.3.10
b692c000-b692f000 rw-p 00068000 08:06 587854 /usr/lib/libfreetype.so.6.3.10
b692f000-b6940000 r-xp 00000000 08:06 587663 /usr/lib/libXft.so.2.1.2
b6940000-b6941000 rw-p 00010000 08:06 587663 /usr/lib/libXft.so.2.1.2
b6941000-b6943000 r-xp 00000000 08:06 587667 /usr/lib/libXinerama.so.1.0.0
b6943000-b6944000 rw-p 00001000 08:06 587667 /usr/lib/libXinerama.so.1.0.0
b6944000-b694c000 r-xp 00000000 08:06 587649 /usr/lib/libXcursor.so.1.0.2
b694c000-b694d000 rw-p 00007000 08:06 587649 /usr/lib/libXcursor.so.1.0.2
b694d000-b6952000 r-xp 00000000 08:06 587677 /usr/lib/libXrandr.so.2.1.0
b6952000-b6953000 rw-p 00005000 08:06 587677 /usr/lib/libXrandr.so.2.1.0
b6953000-b695a000 r-xp 00000000 08:06 587679 /usr/lib/libXrender.so.1.3.0
b695a000-b695b000 rw-p 00006000 08:06 587679 /usr/lib/libXrender.so.1.3.0
b695b000-b6962000 r-xp 00000000 08:06 587665 /usr/lib/libXi.so.6.0.0
b6962000-b6963000 rw-p 00006000 08:06 587665 /usr/lib/libXi.so.6.0.0
b6963000-b6976000 r-xp 00000000 08:06 588397 /usr/lib/libz.so.1.2.3
b6976000-b6977000 rw-p 00012000 08:06 588397 /usr/lib/libz.so.1.2.3
b6977000-b6999000 r-xp 00000000 08:06 588251 /usr/lib/libpng12.so.0.15.0
b6999000-b699a000 rw-p 00021000 08:06 588251 /usr/lib/libpng12.so.0.15.0
b699a000-b69b8000 r-xp 00000000 08:06 588120 /usr/lib/libjpeg.so.62.0.0
b69b8000-b69b9000 rw-p 0001d000 08:06 588120 /usr/lib/libjpeg.so.62.0.0
b69b9000-b6a06000 r-xp 00000000 08:06 587683 /usr/lib/libXt.so.6.0.0
b6a06000-b6a0a000 rw-p 0004c000 08:06 587683 /usr/lib/libXt.so.6.0.0
b6a0a000-b6a1f000 r-xp 00000000 08:06 587717 /usr/lib/libaudio.so.2.4
b6a1f000-b6a20000 rw-p 00015000 08:06 587717 /usr/lib/libaudio.so.2.4
b6a20000-b6a43000 r-xp 00000000 08:06 587844 /usr/lib/libfontconfig.so.1.2.0
b6a43000-b6a4b000 rw-p 00023000 08:06 587844 /usr/lib/libfontconfig.soAborted (core dumped)

maforast
23-05-2007, 14:58
se poi faccio


maforast@Trade:~$ pidof python
15041 15032 14645 11934 11557 11439 5111


sono un pò di pid... li controllo tutti?

ilsensine
23-05-2007, 14:58
Il backtrace di "where" è inconsistente con il memory map, sembra che manchi qualcosa. Raccogli la mappa da /proc come ti ho consigliato. Inoltre ci sono altre cose inspiegabili nel back trace, sembrerebbe una corruzione dello stack a una prima occhiata.

Per il resto, è strano che manchi la free. Installa comunque le libc di debug (pacchetto libc6-dbg su Debian, forse anche su Ubuntu) e segui le istruzioni nella descrizione del pacchetto per sapere come utilizzarle.

ilsensine
23-05-2007, 14:59
se poi faccio


maforast@Trade:~$ pidof python
15041 15032 14645 11934 11557 11439 5111


sono un pò di pid... li controllo tutti?
Hai diversi python in esecuzione, forse per diversi servizi (come webmin, ecc.)
Puoi trovare il tuo esaminando /proc/<pid>/cmdline, cercando quello che ha Main.py come parametro.

ilsensine
23-05-2007, 15:04
Puoi allegare i sorgenti di questo v4l.c che do una occhiata?

maforast
23-05-2007, 15:12
Il backtrace di "where" è inconsistente con il memory map, sembra che manchi qualcosa. Raccogli la mappa da /proc come ti ho consigliato. Inoltre ci sono altre cose inspiegabili nel back trace, sembrerebbe una corruzione dello stack a una prima occhiata.

Per il resto, è strano che manchi la free. Installa comunque le libc di debug (pacchetto libc6-dbg su Debian, forse anche su Ubuntu) e segui le istruzioni nella descrizione del pacchetto per sapere come utilizzarle.

le sto installando da synaptic libc6-dbg 2.5 poi porvo a rifare il where

maforast
23-05-2007, 15:15
le sto installando da synaptic libc6-dbg 2.5 poi porvo a rifare il where

Ci siamo adesos me lo da


(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7d7cdf0 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7d7e641 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0xb7db29bb in __libc_message () from /lib/tls/i686/cmov/libc.so.6
#4 0xb7dbd1ea in free_check () from /lib/tls/i686/cmov/libc.so.6
#5 0xb7dbddd5 in free () from /lib/tls/i686/cmov/libc.so.6
#6 0xb67bfe3d in v4l_dealloc (self=0xb7d38910) at v4l.c:1313
#7 0x0808683f in ?? ()
#8 0xb7d38910 in ?? ()
#9 0xb7db82ce in mem2chunk_check () from /lib/tls/i686/cmov/libc.so.6
#10 0xb7ee40ef in ?? () from /usr/lib/python2.5/site-packages/sip.so
#11 0xb6857a44 in ?? ()
#12 0x081a1440 in ?? ()
#13 0xbf87f530 in ?? ()
#14 0x00000000 in ?? ()
(gdb)

ilsensine
23-05-2007, 15:15
v4l.c riga 1313.
Puoi allegare i sorgenti di quel file?

maforast
23-05-2007, 15:17
Ci siamo adesos me lo da


(gdb) where
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7d7cdf0 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7d7e641 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0xb7db29bb in __libc_message () from /lib/tls/i686/cmov/libc.so.6
#4 0xb7dbd1ea in free_check () from /lib/tls/i686/cmov/libc.so.6
#5 0xb7dbddd5 in free () from /lib/tls/i686/cmov/libc.so.6
#6 0xb67bfe3d in v4l_dealloc (self=0xb7d38910) at v4l.c:1313
#7 0x0808683f in ?? ()
#8 0xb7d38910 in ?? ()
#9 0xb7db82ce in mem2chunk_check () from /lib/tls/i686/cmov/libc.so.6
#10 0xb7ee40ef in ?? () from /usr/lib/python2.5/site-packages/sip.so
#11 0xb6857a44 in ?? ()
#12 0x081a1440 in ?? ()
#13 0xbf87f530 in ?? ()
#14 0x00000000 in ?? ()
(gdb)


guarda un pò è proprio il v4l.c :) se vuoi il pakketto originale lo torvi quì io ho fatto solo quella modifica che è riportata nella prima pagina del post

ilsensine
23-05-2007, 15:19
dove "quì" sta per...? :D

maforast
23-05-2007, 15:21
guarda un pò è proprio il v4l.c :) se vuoi il pakketto originale lo torvi quì io ho fatto solo quella modifica che è riportata nella prima pagina del post


http://members.optushome.com.au/pythondeveloper/programming/python/pyv4l/download/

questo
http://members.optushome.com.au/pythondeveloper/programming/python/pyv4l/download/

maforast
23-05-2007, 15:27
http://members.optushome.com.au/pythondeveloper/programming/python/pyv4l/download/

questo
http://members.optushome.com.au/pythondeveloper/programming/python/pyv4l/download/

ci sono degli esempi puoi utilizzare il primo che si trova nella directory degli esempi levando la radio con una webcam normalissima

ilsensine
23-05-2007, 15:29
Cambia qualcosa se nella funzione v4l_dealloc sostituisci la PyMem_DEL(self) con PyObject_DEL(self) ?

maforast
23-05-2007, 15:43
Cambia qualcosa se nella funzione v4l_dealloc sostituisci la PyMem_DEL(self) con PyObject_DEL(self) ?

Complimenti sei veramente bravo sembra che adesso funziona un attimo che controllo meglio

maforast
23-05-2007, 15:48
Cambia qualcosa se nella funzione v4l_dealloc sostituisci la PyMem_DEL(self) con PyObject_DEL(self) ?

LOL FUNZIONAAAAAAAAAAAAAAAAAAAAAAAA MITICO

Scusa se non mi faccio i fatti miei ma ke lavoro fai? Prima mi hai detto che non conosci bene python ma sei modesto o cosa? :) GRAZIE!!!!

ilsensine
23-05-2007, 15:50
Io? Non conosco una virgola di Python, mai usato in vita mia, giuro.

maforast
23-05-2007, 15:54
Io? Non conosco una virgola di Python, mai usato in vita mia, giuro.


e come hai fatto a dirmi questo? PyMem_DEL(self) con PyObject_DEL(self)

Il dbg si può utilizzare con qualsiasi linguaggio di programmazione? i parametri sono sempre set arg + nome del programma ? :)

ilsensine
23-05-2007, 16:31
No il programma è quello che passi direttamente a gdb, "python" nel tuop caso. set args serve a impostare i parametri da passare al programma.