Что след GDB передает “0x0000000000000000 дюймов?? ()” средний?

Все о переменной области. Переменные, объявленные в функции самоиспускания, по умолчанию доступны только для кода внутри функции самоиспускания. Это позволяет писать код без учета того, как переменные называются в других блоках кода javascript.

Например:

(function(){ 
    var foo = 3; 
    alert(foo); 
})(); 

alert(foo); 

Это сначала предупредит «3», а затем выбросит ошибка в следующем предупреждении, поскольку foo не определен.

14
задан Shane Breatnach 5 January 2009 в 19:01
поделиться

5 ответов

gdb не смог извлечь надлежащий обратный адрес из pthread_mutexattr_init; это получило адрес 0."??" результат поиска адреса 0 в таблице символов. Это не может найти символьное имя, таким образом, это печатает значение по умолчанию"??"

, К сожалению, право бесцеремонно я не знаю, почему оно не могло извлечь корректный обратный адрес.

10
ответ дан 1 December 2019 в 12:40
поделиться

Что-то Вы действительно заставляли библиотеку поточной обработки отказывать. Так как сама библиотека поточной обработки не компилируется с отладочной информацией (-g), она не может отобразить файл исходного кода или номер строки, на котором произошел катастрофический отказ. Кроме того, так как это - потоки, стек вызовов не указывает назад на Ваш файл. К сожалению, это будет жесткой ошибкой для разыскивания, Вы собираетесь, должен ступить через Ваш код и попытаться сузить, когда точно катастрофический отказ происходит.

7
ответ дан 1 December 2019 в 12:40
поделиться

Удостоверьтесь, что Вы компилируете с отладочными символами. (Для gcc я думаю, что это-g опция). Тогда необходимо быть в состоянии вытащить более интересную информацию из GDB. Не забывайте выключать его при компиляции производственной версии.

3
ответ дан 1 December 2019 в 12:40
поделиться

Я мог пропускать что-то, но не являюсь этим показательным из кого-то использование 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 немного датировано, но там используется, чтобы быть проблемами вокруг этого.

2
ответ дан 1 December 2019 в 12:40
поделиться

Возможно, ошибка, которая вызвала катастрофический отказ, повредила стек (перезаписанные части стека)? В этом случае след мог бы быть бесполезным; никакая идея, что сделать в этом случае...

0
ответ дан 1 December 2019 в 12:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: