[DBD-SQLite] load_extension("perlvtab.so")

Brian Duggan bduggan at matatu.org
Fri Oct 30 00:50:54 GMT 2009


On Thursday, October 29, Tim Bunce wrote: 
> What does "print *imp_xxh->com.std.dbistate" show in gdb?

(gdb) print *imp_xxh->com.std.dbistate
$1 = {check_version = 0xae79c0 <check_version>, version = 94, size = 108, xs_version = 93, spare_pad = 0,
  debug = 0, logfp = 0x95bac94, neat_svpv = 0xaebd40 <neatsvpv>, getcom = 0xaf5b70 <dbih_getcom>,
  clearcom = 0xaf4fa0 <dbih_clearcom>, event = 0xae7b10 <dbih_event>, set_attr_k = 0xaf2de0 <dbih_set_attr_k>,
  get_attr_k = 0xaf1840 <dbih_get_attr_k>, get_fbav = 0xaef8e0 <dbih_get_fbav>,
  make_fdsv = 0xaff320 <dbih_make_fdsv>, bind_as_num = 0xae77e0 <quote_type>, hash = 0xaea140 <dbi_hash>,
  preparse = 0, neatsvpvlen = 0x95f8ac0, thr_owner = 0x959c008, logmsg = 0xaeab90 <dbih_logmsg>,
  set_err_sv = 0xaee450 <set_err_sv>, set_err_char = 0xaef6e0 <set_err_char>,
  bind_col = 0xaedf40 <dbih_sth_bind_col>, logfp_ref = 0x0, pad2 = {0x0, 0x0, 0x0, 0x0}}

> This may help, or it may just shift or hide the underlying problem:
> 
> --- DBI.xs  (revision 13337)
> +++ DBI.xs  (working copy)
> @@ -1436,7 +1436,7 @@
>      dPERINTERP;
>      dTHR;
>      int dump = FALSE;
> -    int debug = DBIS_TRACE_LEVEL;
> +    int debug = DBIc_TRACE_LEVEL(imp_xxh);
>      int auto_dump = (debug >= 6);
>      imp_xxh_t * const parent_xxh = DBIc_PARENT_COM(imp_xxh);
>      /* Note that we're very much on our own here. DBIc_MY_H(imp_xxh) almost   */

I applied that to DBI-1.609, and re-ran the test.  Here's the output :

~$ perl test.pl
Segmentation fault (core dumped)

~$ gdb -c core perl
[..]
Core was generated by `perl test.pl'.
Program terminated with signal 11, Segmentation fault.
#0  0x00e3e001 in dbih_clearcom (imp_xxh=0x843e388) at DBI.xs:1429
1429        dPERINTERP;
(gdb) where
#0  0x00e3e001 in dbih_clearcom (imp_xxh=0x843e388) at DBI.xs:1429
#1  0x00e3095d in XS_DBD___mem__common_DESTROY (my_perl=0x82f3008, cv=0x8359978) at DBI.xs:5135
#2  0x080b12c0 in Perl_pp_entersub (my_perl=0x82f3008) at pp_hot.c:2866
#3  0x080ad2f2 in Perl_call_sv (my_perl=0x82f3008, sv=0x8359978, flags=150) at perl.c:2653
#4  0x080c3293 in Perl_sv_clear (my_perl=0x82f3008, sv=0x8450720) at sv.c:5122
#5  0x080c398a in Perl_sv_free2 (my_perl=0x82f3008, sv=0x8450720) at sv.c:5368
#6  0x08098d86 in Perl_mg_free (my_perl=0x82f3008, sv=0x8450680) at mg.c:498
#7  0x080c349e in Perl_sv_clear (my_perl=0x82f3008, sv=0x8450680) at sv.c:5159
#8  0x080c398a in Perl_sv_free2 (my_perl=0x82f3008, sv=0x8450680) at sv.c:5368
#9  0x080b8b19 in S_visit (my_perl=<value optimized out>, f=<value optimized out>, flags=2048, mask=2048)
    at sv.c:387
#10 0x080b8b79 in Perl_sv_clean_objs (my_perl=0x82f3008) at sv.c:495
#11 0x080af3c7 in perl_destruct (my_perl=0x82f3008) at perl.c:799
#12 0x08063fa5 in main (argc=2, argv=0xbff415d4, env=0xbff415e0) at perlmain.c:115
(gdb) print *imp_xxh->com.std.dbistate
$1 = {check_version = 0xe309c0 <check_version>, version = 94, size = 108, xs_version = 93, spare_pad = 0,
  debug = 0, logfp = 0x8311c44, neat_svpv = 0xe34d40 <neatsvpv>, getcom = 0xe3eb80 <dbih_getcom>,
  clearcom = 0xe3dfa0 <dbih_clearcom>, event = 0xe30b10 <dbih_event>, set_attr_k = 0xe3bde0 <dbih_set_attr_k>,
  get_attr_k = 0xe3a840 <dbih_get_attr_k>, get_fbav = 0xe388e0 <dbih_get_fbav>,
  make_fdsv = 0xe48330 <dbih_make_fdsv>, bind_as_num = 0xe307e0 <quote_type>, hash = 0xe33140 <dbi_hash>,
  preparse = 0, neatsvpvlen = 0x834f9c8, thr_owner = 0x82f3008, logmsg = 0xe33b90 <dbih_logmsg>,
  set_err_sv = 0xe37450 <set_err_sv>, set_err_char = 0xe386e0 <set_err_char>,
  bind_col = 0xe36f40 <dbih_sth_bind_col>, logfp_ref = 0x0, pad2 = {0x0, 0x0, 0x0, 0x0}}

-Brian




More information about the DBD-SQLite mailing list