Debugging a crash

Fernando Apesteguía fernando.apesteguia at gmail.com
Sun Jun 30 18:57:42 UTC 2013


On Sun, Jun 30, 2013 at 6:58 PM, Boris Samorodov <bsam at passap.ru> wrote:

> 30.06.2013 19:53, Fernando Apesteguía пишет:
> > On Sun, Jun 30, 2013 at 5:36 PM, Boris Samorodov <bsam at passap.ru> wrote:
> >
> >> Hi All,
> >>
> >> I get an application crashing. Build some libs with debug symbols.
> >> Here is the gdb log:
> >> -----
> >> Program received signal SIGSEGV, Segmentation fault.
> >> [Switching to Thread 809806400 (LWP 101133/photoprint)]
> >> strtol_l (nptr=0x0, endptr=0x0, base=10, locale=<value optimized out>)
> >> at /usr/src/lib/libc/stdlib/strtol.c:73
> >> 73              } while (isspace_l((unsigned char)c, locale));
> >> Current language:  auto; currently minimal
> >> (gdb) bt
> >> #0  strtol_l (nptr=0x0, endptr=0x0, base=10, locale=<value optimized
> >
> >                         ^^^^
> > It seems you are passing a NULL str to strtol.
>
> OK. So how to proceed in debugging it?
>

Assuming you have the source code of the application, you could try to set
a break point right before the call to strtol. Or you can also try to
printf some message in the case the pointer you are passing equals to NULL
and try to figure out why that pointer is NULL.

Since one of the previous frames is called ps_parameters, I assume it is
trying to do something either with the program arguments or the environment
stored in ps_strings so maybe the program is not fault tolerant to an
unexpected environment/arguments?

Cheers.


>
> >> out>) at /usr/src/lib/libc/stdlib/strtol.c:73
> >> #1  0x00000008017d951c in ps_parameters (v=0x809d0dc00, name=0x80996c120
> >> "JCLBOXHOLDTYPE", description=0x7fffffffd0a8) at print-ps.c:380
> >> #2  0x00000008017996df in stp_describe_parameter (v=0x809d0dc00,
> >> name=0x80996c120 "JCLBOXHOLDTYPE", description=0x7fffffffd0a8) at
> >> print-vars.c:1687
> >> #3  0x000000000046cfd2 in ?? ()
> >> #4  0x00000000004627a1 in ?? ()
> >> #5  0x0000000000461da4 in ?? ()
> >> #6  0x00000000004657fe in ?? ()
> >> #7  0x0000000000422863 in ?? ()
> >> #8  0x0000000000421f45 in ?? ()
> >> #9  0x000000000041054f in ?? ()
> >> #10 0x0000000800719000 in ?? ()
> >> #11 0x0000000000000000 in ?? ()
> >> (gdb) fr 0
> >> #0  strtol_l (nptr=0x0, endptr=0x0, base=10, locale=<value optimized
> >> out>) at /usr/src/lib/libc/stdlib/strtol.c:73
> >> 73              } while (isspace_l((unsigned char)c, locale));
> >> (gdb) fr 1
> >> #1  0x00000008017d951c in ps_parameters (v=0x809d0dc00, name=0x80996c120
> >> "JCLBOXHOLDTYPE", description=0x7fffffffd0a8) at print-ps.c:380
> >> 380       num_choices = atoi(stp_mxmlElementGetAttr(option,
> >> "num_choices"));
> >> (gdb) fr 2
> >> #2  0x00000008017996df in stp_describe_parameter (v=0x809d0dc00,
> >> name=0x80996c120 "JCLBOXHOLDTYPE", description=0x7fffffffd0a8) at
> >> print-vars.c:1687
> >> 1687      stp_printer_describe_parameter(v, name, description);
> >> (gdb)
> >> -----
> >>
> >> How should I proceed with debugging? Thanks!
>
> --
> WBR, Boris Samorodov (bsam)
> FreeBSD Committer, http://www.FreeBSD.org The Power To Serve
>


More information about the freebsd-questions mailing list