Все о переменной области. Переменные, объявленные в функции самоиспускания, по умолчанию доступны только для кода внутри функции самоиспускания. Это позволяет писать код без учета того, как переменные называются в других блоках кода javascript.
Например:
(function(){
var foo = 3;
alert(foo);
})();
alert(foo);
Это сначала предупредит «3», а затем выбросит ошибка в следующем предупреждении, поскольку foo не определен.
gdb не смог извлечь надлежащий обратный адрес из pthread_mutexattr_init; это получило адрес 0."??" результат поиска адреса 0 в таблице символов. Это не может найти символьное имя, таким образом, это печатает значение по умолчанию"??"
, К сожалению, право бесцеремонно я не знаю, почему оно не могло извлечь корректный обратный адрес.
Что-то Вы действительно заставляли библиотеку поточной обработки отказывать. Так как сама библиотека поточной обработки не компилируется с отладочной информацией (-g), она не может отобразить файл исходного кода или номер строки, на котором произошел катастрофический отказ. Кроме того, так как это - потоки, стек вызовов не указывает назад на Ваш файл. К сожалению, это будет жесткой ошибкой для разыскивания, Вы собираетесь, должен ступить через Ваш код и попытаться сузить, когда точно катастрофический отказ происходит.
Удостоверьтесь, что Вы компилируете с отладочными символами. (Для gcc я думаю, что это-g опция). Тогда необходимо быть в состоянии вытащить более интересную информацию из GDB. Не забывайте выключать его при компиляции производственной версии.
Я мог пропускать что-то, но не являюсь этим показательным из кого-то использование NULL
как указатель функции?
#include <stdio.h>
typedef int (*funcptr)(void);
int
func_caller(funcptr f)
{
return (*f)();
}
int
main()
{
return func_caller(NULL);
}
Это производит тот же стиль следа при выполнении его в gdb:
rivendell$ gcc -g -O0 foo.c -o foo
rivendell$ gdb --quiet foo
Reading symbols for shared libraries .. done
(gdb) r
Starting program: ...
Reading symbols for shared libraries . done
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x00000000 in ?? ()
(gdb) bt
#0 0x00000000 in ?? ()
#1 0x00001f9d in func_caller (f=0) at foo.c:8
#2 0x00001fb1 in main () at foo.c:14
Это - довольно странный катастрофический отказ хотя... pthread_mutexattr_init
редко делает что-то большее чем выделяют структуру данных и memset
это. Я искал бы что-то еще продолжение. Есть ли возможность несогласованных библиотек поточной обработки или чего-то. Мое знание BSD немного датировано, но там используется, чтобы быть проблемами вокруг этого.
Возможно, ошибка, которая вызвала катастрофический отказ, повредила стек (перезаписанные части стека)? В этом случае след мог бы быть бесполезным; никакая идея, что сделать в этом случае...