Следующие компиляции кода и это протестировали OK.
create or replace function subtree (bigint) returns setof example as $ declare results record; entry record; recs record; begin select into results * from example where parent = $1; if found then for entry in select child from example where parent = $1 and child parent loop for recs in select * from subtree(entry.child) loop return next recs; end loop; end loop; end if; return next results; end; $ language 'plpgsql';
условие "дочерний <> родитель" необходим в моем случае, потому что узлы указывают себе.
Весело проводят время :)
SystemTap кажется Linux тем, что Dtrace предназначен для Solaris .. однако я считаю его довольно враждебным в использовании. Тем не менее, вы можете попробовать. NB: скомпилируйте ядро с отладочной информацией и потратьте некоторое время на перехватчики инструментария ядра.
Вот почему многие все еще используют printk () после эмпирического сужения ошибки до определенного модуля.
Я не рекомендуя его, просто указывая, что он существует. Возможно, мне не хватит ума, чтобы оценить красоту, лежащую в основе… Я просто пишу драйверы для нечетных устройств.
однако я считаю его довольно враждебным в использовании. Тем не менее, вы можете попробовать. NB: скомпилируйте ядро с отладочной информацией и потратьте некоторое время на перехватчики инструментария ядра.Вот почему многие до сих пор используют printk () после эмпирического сужения ошибки до определенного модуля.
Я не рекомендуя его, просто указывая на то, что он существует. Возможно, я недостаточно умен, чтобы оценить скрытую красоту ... Я просто пишу драйверы для нестандартных устройств.
однако я считаю его довольно враждебным в использовании. Тем не менее, вы можете попробовать. NB: скомпилируйте ядро с отладочной информацией и потратьте некоторое время на перехватчики инструментария ядра.Вот почему многие до сих пор используют printk () после эмпирического сужения ошибки до определенного модуля.
Я не рекомендуя его, просто указывая на то, что он существует. Возможно, я недостаточно умен, чтобы оценить скрытую красоту ... Я просто пишу драйверы для нестандартных устройств.
Существует множество разнообразных методов в зависимости от типа проблем, которые вы хотите отладить. В вашем случае первый вопрос: действительно ли система заморожена? Вы можете включить волшебный ключ sysrq и проверить состояние системы в момент зависания и перейти оттуда.
Вероятно, наиболее мощным методом является включение отладчика ядра и подключение к нему через последовательный кабель.
Если вы можете воспроизвести проблему внутри виртуальной машины, существует довольно новая (AFAIK) техника, которая может оказаться полезной: отладка виртуальной машины с хост-машины, на которой она работает.
Смотрите, например, это: Отладка ядра Linux в VMWare с хоста Windows
VMware Workstation 7 также позволяет использовать мощную технику, которая позволяет детерминированно записывать выполнение системы и затем воспроизводить его по желанию, даже в обратном порядке. Таким образом, как только система падает, вы можете вернуться назад и посмотреть, что происходило в тот момент (и даже попробовать что-то изменить и посмотреть, не произойдет ли сбой). IIRC я где-то читал, что вы не можете делать это и одновременно отлаживать ядро с помощью VMware/gdb.
Очевидно, что для этого вам нужен VMM. Я не знаю, какие VMM, кроме семейства VMM от VMware, поддерживают это, и я не знаю, поддерживают ли это какие-либо бесплатные версии VMware. Скорее всего, нет; нельзя ожидать, что коммерческая компания будет предоставлять все бесплатно. Пробная версия работает 30 дней.
Если ваши пользовательские драйверы предназначены для оборудования внутри машины, то, вероятно, это не сработает.