parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

А вот это похоже несовместимость с GCC 4.4.3 (или с libc)

MoKo 09.09.2010 03:12

Program terminated with signal 11, Segmentation fault.
(gdb) bt
#0 0x00007f8ff97e435e in vfprintf () from /lib/libc.so.6
#1 0x00007f8ff9807682 in vsnprintf () from /lib/libc.so.6
#2 0x000000000040ae53 in __vsnprintf (b=0x7fff7f61c3f0 "Parser/", s=1023, f=0x552a17 "Parser/%s", l=0x7fff7f61c840) at pa_common.C:945
#3 0x0000000000406772 in die_or_abort (fmt=0x552a17 "Parser/%s", args=0x7fff7f61c840, write_core=false) at parser3.C:164
#4 0x00000000004068e0 in SAPI::die (fmt=0x552a17 "Parser/%s") at parser3.C:201
#5 0x0000000000406e17 in real_parser_handler (filespec_to_process=0x7fff7f61dc10 "", request_method=0x7fff7f61ff47 "GET", header_only=false)
at parser3.C:382
#6 0x000000000040785f in main (argc=1, argv=0x7fff7f61e138) at parser3.C:754

(gdb) print *l
$2 = {gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fff7f61c920, reg_save_area = 0x7fff7f61c860}

Более-менее разобрался, в чем дело - внутри die_or_abort мы сначала вызываем log, который тоже вызывает vsnprintf.
А в доке написано так:

The functions vprintf(), vfprintf(), vsprintf(), vsnprintf() are equivalent to the functions printf(), fprintf(), sprintf(), snprintf(), respectively, except that they are called with a va_list instead of a variable number of arguments. These functions do not call the va_end macro. Because they invoke the va_arg macro, the value of ap is undefined after the call. See stdarg(3).

В общем непонятно, почему только сейчас вылезло. :)