[vz-dev] 1wirevz Segmentation fault

Thorben Thuermer r00t at constancy.org
Wed Sep 4 20:53:11 CEST 2013


On Wed, 04 Sep 2013 19:54:20 +0200
Andreas Brus <andreas at brus.name> wrote:
> Am 04.09.2013 15:44, schrieb Thorben Thuermer:
> > also genau wie vermutet...
> >> #4  0x00009d6c in http_post (temp=63.875, vzuuid=0x13a54
> >> "589a4a00-fe87-11e2-8991-e7a40a5b0f79") at 1wirevz.c:296
> >>           curl = 0x9100
> >>           curl_res = 88648
> > es ist noch hilfreich, wenn du den sourcecode zu dem binary noch auf dem
> > system an der gleichen stelle liegen hast, dann bekommst du die codezeilen
> > angezeigt.
> Hmmm. source liegt genau immer noch an der gleichen Stelle.
> Aber nach Deiner Anleitung natürlich nicht im gleichen Pfad wie das 
> binary :-) jetzt aber...
"meine" anleitung?

> #4  0x00009d6c in http_post (temp=28.687000000000001, vzuuid=0x13a54 
> "589a4a00-fe87-11e2-8991-e7a40a4b0f79") at 1wirevz.c:296
>          curl = 0x9100
>          curl_res = 88648
[...]
> (gdb) print vzserver
> $1 = 0x172d0 "smart-meter.brus.loc"
> (gdb) print vzport
> $2 = 80

> (gdb) print vzuuid
> $4 = {{'\000' <repeats 63 times> <repeats 32 times>}, {'\000' <repeats 
> 63 times>,
>      "589a4a00-fe87-11e2-8991-e7a40a4b0f78", '\000' <repeats 27 times>,

vzuuid sieht komisch aus, ist aber ok weil ja ein array,
nur der erste eintrag ist leer, weil die offsets erst ab 1 benutzt werden:
236             count = 1;
aber C-arrays bei 0 anfangen.
vlt ist das schon der bug? versuche mal da eine 4 einzutragen,
denn die [3] bedeutet dass nur die eintrage 0-2 gueltig sind!:
 54 char sensorid[3][32][17], vzuuid[3][32][64],

ansonsten ist halt vzpath totaler kaese,
das verursacht dann wohl den absturz.
was auffaellt ist das die zahlen die im vzpath pointer stehen,
alles ascii-werte sind:
> (gdb) print vzpath
> $3 = 0x65383362 <Address 0x65383362 out of bounds>
$ xxd -r <<<'0: 65 38 33 62' ; echo
e83b

das ist vermutlich ein teil einer deiner UUIDs, die an der falschen stelle
im speicher abgelegt wird, und vzpath ueberschreibt.

jetzt sollte man ein paar breakpoints setzen, um zu klaeren warum da muell
drinsteht.

am besten erstmal nach dem laden der config:
(gdb) b main.c:356     <-- das ist bei mir nach dem cfile() aufruf in main()
oder einfach:
(gdb) b ds1820init

und dort vzpath pruefen,
ich vermute dort wird er noch ok sein,
und er wird dann im programmablauf irgendwann ueberschrieben.
(das programm mit "c" fuer "continue" fortsetzen lassen, nachdem du den wert
 geprueft hast)

und dann zumindest nochmal nach ds1820init()
(gdb) b main.c:358
bzw
(gdb) b daemonize

- Thorben


More information about the volkszaehler-dev mailing list