diff options
Diffstat (limited to 'documentation/content/ru/books/developers-handbook/kerneldebug/_index.po')
| -rw-r--r-- | documentation/content/ru/books/developers-handbook/kerneldebug/_index.po | 2242 |
1 files changed, 2242 insertions, 0 deletions
diff --git a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po new file mode 100644 index 0000000000..bda6f032ce --- /dev/null +++ b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po @@ -0,0 +1,2242 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR The FreeBSD Project +# This file is distributed under the same license as the FreeBSD Documentation package. +# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2025-06-29 21:20+0100\n" +"PO-Revision-Date: 2025-11-12 04:45+0000\n" +"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n" +"Language-Team: Russian <https://translate-dev.freebsd.org/projects/" +"documentation/booksdevelopers-handbookkerneldebug_index/ru/>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.17\n" + +#. type: YAML Front Matter: description +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:1 +#, no-wrap +msgid "FreeBSD Kernel Debugging" +msgstr "Отладка ядра FreeBSD" + +#. type: YAML Front Matter: title +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:1 +#, no-wrap +msgid "Chapter 10. Kernel Debugging" +msgstr "Глава 10. Отладка ядра" + +#. type: Title = +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:18 +#, no-wrap +msgid "Kernel Debugging" +msgstr "Отладка ядра" + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:56 +#, no-wrap +msgid "Obtaining a Kernel Crash Dump" +msgstr "Получение аварийного дампа ядра" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:61 +msgid "" +"When running a development kernel (e.g., FreeBSD-CURRENT), such as a kernel " +"under extreme conditions (e.g., very high load averages, tens of thousands " +"of connections, exceedingly high number of concurrent users, hundreds of man:" +"jail[8]s, etc.), or using a new feature or device driver on FreeBSD-STABLE " +"(e.g., PAE), sometimes a kernel will panic. In the event that it does, this " +"chapter will demonstrate how to extract useful information out of a crash." +msgstr "" +"При работе с разрабатываемым ядром (например, FreeBSD-CURRENT), особенно в " +"экстремальных условиях (например, при очень высокой загрузке, десятках тысяч " +"соединений, чрезвычайно большом количестве одновременных пользователей, " +"сотнях man:jail[8] и т.д.), или при использовании новой функции или драйвера " +"устройства в FreeBSD-STABLE (например, PAE), иногда может возникнуть паника " +"ядра. В случае, если это произойдет, данная глава покажет, как извлечь " +"полезную информацию из аварийного дампа." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:66 +msgid "" +"A system reboot is inevitable once a kernel panics. Once a system is " +"rebooted, the contents of a system's physical memory (RAM) is lost, as well " +"as any bits that are on the swap device before the panic. To preserve the " +"bits in physical memory, the kernel makes use of the swap device as a " +"temporary place to store the bits that are in RAM across a reboot after a " +"crash. In doing this, when FreeBSD boots after a crash, a kernel image can " +"now be extracted and debugging can take place." +msgstr "" +"Перезагрузка системы неизбежна после паники ядра. После перезагрузки системы " +"содержимое физической памяти (RAM) теряется, как и любые данные на " +"устройстве подкачки перед паникой. Чтобы сохранить данные в физической " +"памяти, ядро использует устройство подкачки как временное хранилище для " +"данных из RAM после сбоя и перезагрузки. Благодаря этому, когда FreeBSD " +"загружается после сбоя, образ ядра может быть извлечен и проведена отладка." + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:72 +msgid "" +"A swap device that has been configured as a dump device still acts as a swap " +"device. Dumps to non-swap devices (such as tapes or CDRWs, for example) are " +"not supported at this time. A \"swap device\" is synonymous with a \"swap " +"partition.\"" +msgstr "" +"Устройство подкачки, настроенное как устройство для дампа, продолжает " +"функционировать как устройство подкачки. В настоящее время дампы на " +"устройства, не являющиеся устройствами подкачки (например, на ленты или " +"CDRW), не поддерживаются. Термин \"устройство подкачки\" является синонимом " +"термина \"раздел подкачки\"." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:75 +msgid "Several types of kernel crash dumps are available:" +msgstr "Есть несколько типов аварийных дампов ядра:" + +#. type: Labeled list +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:76 +#, no-wrap +msgid "Full memory dumps" +msgstr "Полные дампы памяти" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:78 +msgid "Hold the complete contents of physical memory." +msgstr "Содержат полное содержимое физической памяти." + +#. type: Labeled list +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:79 +#, no-wrap +msgid "Minidumps" +msgstr "Минидампы" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:81 +msgid "Hold only memory pages in use by the kernel (FreeBSD 6.2 and higher)." +msgstr "" +"Содержат только страницы памяти, используемые ядром (FreeBSD 6.2 и выше)." + +#. type: Labeled list +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:82 +#, no-wrap +msgid "Textdumps" +msgstr "Текстовые дампы" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:84 +msgid "" +"Hold captured, scripted, or interactive debugger output (FreeBSD 7.1 and " +"higher)." +msgstr "" +"Содержать захваченные, записанные или интерактивные выходные данные " +"отладчика (FreeBSD 7.1 и выше)." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:86 +msgid "" +"Minidumps are the default dump type as of FreeBSD 7.0, and in most cases " +"will capture all necessary information present in a full memory dump, as " +"most problems can be isolated only using kernel state." +msgstr "" +"Минидампы являются типом дампа по умолчанию, начиная с FreeBSD 7.0, и в " +"большинстве случаев они сохраняют всю необходимую информацию, присутствующую " +"в полном дампе памяти, так как большинство проблем можно изолировать, " +"используя только состояние ядра." + +#. type: Title === +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:88 +#, no-wrap +msgid "Configuring the Dump Device" +msgstr "Настройка устройства дампа" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:96 +msgid "" +"Before the kernel will dump the contents of its physical memory to a dump " +"device, a dump device must be configured. A dump device is specified by " +"using the man:dumpon[8] command to tell the kernel where to save kernel " +"crash dumps. The man:dumpon[8] program must be called after the swap " +"partition has been configured with man:swapon[8]. This is normally handled " +"by setting the `dumpdev` variable in man:rc.conf[5] to the path of the swap " +"device (the recommended way to extract a kernel dump) or `AUTO` to use the " +"first configured swap device. The default for `dumpdev` is `AUTO` in HEAD, " +"and changed to `NO` on RELENG_* branches (except for RELENG_7, which was " +"left set to `AUTO`). On FreeBSD 9.0-RELEASE and later versions, bsdinstall " +"will ask whether crash dumps should be enabled on the target system during " +"the install process." +msgstr "" +"Прежде чем ядро запишет содержимое своей физической памяти на устройство " +"дампа, необходимо настроить это устройство. Устройство дампа указывается с " +"помощью команды man:dumpon[8], чтобы сообщить ядру, куда сохранять аварийные " +"дампы. Программа man:dumpon[8] должна быть вызвана после настройки раздела " +"подкачки с помощью man:swapon[8]. Обычно это обрабатывается установкой " +"переменной `dumpdev` в man:rc.conf[5] в путь к устройству подкачки " +"(рекомендуемый способ извлечения дампа ядра) или в значение `AUTO` для " +"использования первого настроенного устройства подкачки. По умолчанию " +"`dumpdev` имеет значение `AUTO` в HEAD и изменено на `NO` в ветках RELENG_* " +"(за исключением RELENG_7, где оставлено значение `AUTO`). Начиная с FreeBSD " +"9.0-RELEASE и более поздних версий, bsdinstall будет спрашивать, следует ли " +"включить аварийные дампы на целевой системе во время процесса установки." + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:100 +msgid "" +"Check [.filename]#/etc/fstab# or man:swapinfo[8] for a list of swap devices." +msgstr "" +"Проверьте [.filename]#/etc/fstab# или man:swapinfo[8] для получения списка " +"устройств подкачки." + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:105 +msgid "" +"Make sure the `dumpdir` specified in man:rc.conf[5] exists before a kernel " +"crash!" +msgstr "" +"Убедитесь, что каталог `dumpdir`, указанный в man:rc.conf[5], существует " +"перед аварией ядра!" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:110 +#, no-wrap +msgid "" +"# mkdir /var/crash\n" +"# chmod 700 /var/crash\n" +msgstr "" +"# mkdir /var/crash\n" +"# chmod 700 /var/crash\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:113 +msgid "" +"Also, remember that the contents of [.filename]#/var/crash# is sensitive and " +"very likely contains confidential information such as passwords." +msgstr "" +"Также помните, что содержимое [.filename]#/var/crash# является " +"конфиденциальным и, скорее всего, содержит секретную информацию, такую как " +"пароли." + +#. type: Title === +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:116 +#, no-wrap +msgid "Extracting a Kernel Dump" +msgstr "Извлечение дампа ядра" + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:122 +msgid "" +"Once a dump has been written to a dump device, the dump must be extracted " +"before the swap device is mounted. To extract a dump from a dump device, " +"use the man:savecore[8] program. If `dumpdev` has been set in man:rc." +"conf[5], man:savecore[8] will be called automatically on the first multi-" +"user boot after the crash and before the swap device is mounted. The " +"location of the extracted core is placed in the man:rc.conf[5] value " +"`dumpdir`, by default [.filename]#/var/crash# and will be named [." +"filename]#vmcore.0#." +msgstr "" +"После записи дампа на устройство дампа, дамп должен быть извлечен до " +"монтирования устройства подкачки. Для извлечения дампа с устройства дампа " +"используйте программу man:savecore[8]. Если в man:rc.conf[5] установлен " +"параметр `dumpdev`, man:savecore[8] будет автоматически вызван при первой " +"загрузке в многопользовательском режиме после сбоя и до монтирования " +"устройства подкачки. Расположение извлеченного ядра указывается в параметре " +"`dumpdir` файла man:rc.conf[5], по умолчанию это [.filename]#/var/crash#, а " +"имя файла будет [.filename]#vmcore.0#." + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:126 +msgid "" +"In the event that there is already a file called [.filename]#vmcore.0# in [." +"filename]#/var/crash# (or whatever `dumpdir` is set to), the kernel will " +"increment the trailing number for every crash to avoid overwriting an " +"existing [.filename]#vmcore# (e.g., [.filename]#vmcore.1#). man:savecore[8] " +"will always create a symbolic link to named [.filename]#vmcore.last# in [." +"filename]#/var/crash# after a dump is saved. This symbolic link can be used " +"to locate the name of the most recent dump." +msgstr "" +"В случае, если файл с именем [.filename]#vmcore.0# уже существует в [." +"filename]#/var/crash# (или в каталоге, указанном в параметре `dumpdir`), " +"ядро будет увеличивать завершающее число при каждом сбое, чтобы избежать " +"перезаписи существующего файла [.filename]#vmcore# (например, [." +"filename]#vmcore.1#). man:savecore[8] всегда создает символическую ссылку с " +"именем [.filename]#vmcore.last# в [.filename]#/var/crash# после сохранения " +"дампа. Эта символическая ссылка может быть использована для определения " +"имени последнего дампа." + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:130 +msgid "" +"The man:crashinfo[8] utility generates a text file containing a summary of " +"information from a full memory dump or minidump. If `dumpdev` has been set " +"in man:rc.conf[5], man:crashinfo[8] will be invoked automatically after man:" +"savecore[8]. The output is saved to a file in `dumpdir` named [." +"filename]#core.txt.N#." +msgstr "" +"Утилита man:crashinfo[8] создаёт текстовый файл, содержащий сводную " +"информацию из полного дампа памяти или минидампа. Если параметр `dumpdev` " +"установлен в man:rc.conf[5], man:crashinfo[8] будет автоматически вызван " +"после man:savecore[8]. Результат сохраняется в файл с именем [.filename]#core" +".txt.N# в каталоге `dumpdir`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:135 +msgid "" +"If you are testing a new kernel but need to boot a different one in order to " +"get your system up and running again, boot it only into single user mode " +"using the `-s` flag at the boot prompt, and then perform the following steps:" +msgstr "" +"Если вы тестируете новое ядро, но вам нужно загрузить другое, чтобы снова " +"запустить систему, загрузите его только в однопользовательском режиме, " +"используя флаг `-s` при загрузке, а затем выполните следующие шаги:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:142 +#, no-wrap +msgid "" +"# fsck -p\n" +"# mount -a -t ufs # make sure /var/crash is writable\n" +"# savecore /var/crash /dev/ad0s1b\n" +"# exit # exit to multi-user\n" +msgstr "" +"# fsck -p\n" +"# mount -a -t ufs # make sure /var/crash is writable\n" +"# savecore /var/crash /dev/ad0s1b\n" +"# exit # exit to multi-user\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:147 +msgid "" +"This instructs man:savecore[8] to extract a kernel dump from [.filename]#/" +"dev/ad0s1b# and place the contents in [.filename]#/var/crash#. Do not " +"forget to make sure the destination directory [.filename]#/var/crash# has " +"enough space for the dump. Also, do not forget to specify the correct path " +"to your swap device as it is likely different than [.filename]#/dev/ad0s1b#!" +msgstr "" +"Это указывает man:savecore[8] извлечь дамп ядра из [.filename]#/dev/ad0s1b# " +"и поместить содержимое в [.filename]#/var/crash#. Не забудьте убедиться, что " +"целевой каталог [.filename]#/var/crash# имеет достаточно места для дампа. " +"Также не забудьте указать правильный путь к вашему swap-устройству, так как " +"он, скорее всего, отличается от [.filename]#/dev/ad0s1b#!" + +#. type: Title === +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:149 +#, no-wrap +msgid "Testing Kernel Dump Configuration" +msgstr "Тестирование конфигурации дампа ядра" + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:154 +msgid "" +"The kernel includes a man:sysctl[8] node that requests a kernel panic. This " +"can be used to verify that your system is properly configured to save kernel " +"crash dumps. You may wish to remount existing file systems as read-only in " +"single user mode before triggering the crash to avoid data loss." +msgstr "" +"Ядро включает узел man:sysctl[8], который вызывает панику ядра. Это можно " +"использовать для проверки того, что ваша система правильно настроена для " +"сохранения дампов аварийного завершения работы ядра. Возможно, вы захотите " +"перемонтировать существующие файловые системы в режиме только для чтения в " +"однопользовательском режиме перед тем, как вызвать панику, чтобы избежать " +"потери данных." + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:164 +#, no-wrap +msgid "" +"# shutdown now\n" +"...\n" +"Enter full pathname of shell or RETURN for /bin/sh:\n" +"# mount -a -u -r\n" +"# sysctl debug.kdb.panic=1\n" +"debug.kdb.panic:panic: kdb_sysctl_panic\n" +"...\n" +msgstr "" +"# shutdown now\n" +"...\n" +"Enter full pathname of shell or RETURN for /bin/sh:\n" +"# mount -a -u -r\n" +"# sysctl debug.kdb.panic=1\n" +"debug.kdb.panic:panic: kdb_sysctl_panic\n" +"...\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:167 +msgid "" +"After rebooting, your system should save a dump in [.filename]#/var/crash# " +"along with a matching summary from man:crashinfo[8]." +msgstr "" +"После перезагрузки система должна сохранить дамп в [.filename]#/var/crash# " +"вместе с соответствующим отчётом из man:crashinfo[8]." + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:169 +#, no-wrap +msgid "Debugging a Kernel Crash Dump with `kgdb`" +msgstr "Отладка аварийного дампа ядра с помощью `kgdb`" + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:176 +msgid "" +"This section covers man:kgdb[1]. The latest version is included in the " +"package:devel/gdb[]. An older version is also present in FreeBSD 11 and " +"earlier." +msgstr "" +"Этот раздел посвящен man:kgdb[1]. Последняя версия включена в пакет package:" +"devel/gdb[]. Более старая версия также присутствует в FreeBSD 11 и более " +"ранних версиях." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:179 +msgid "" +"To enter into the debugger and begin getting information from the dump, " +"start kgdb:" +msgstr "" +"Чтобы войти в отладчик и начать получение информации из дампа, запустите " +"kgdb:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:183 +#, no-wrap +msgid "# kgdb -n N\n" +msgstr "# kgdb -n N\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:187 +msgid "" +"Where _N_ is the suffix of the [.filename]#vmcore.N# to examine. To open " +"the most recent dump use:" +msgstr "" +"Где _N_ — это суффикс файла [.filename]#vmcore.N#, который нужно изучить. " +"Чтобы открыть последний дамп, используйте:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:191 +#, no-wrap +msgid "# kgdb -n last\n" +msgstr "# kgdb -n last\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:195 +msgid "" +"Normally, man:kgdb[1] should be able to locate the kernel running at the " +"time the dump was generated. If it is not able to locate the correct " +"kernel, pass the pathname of the kernel and dump as two arguments to kgdb:" +msgstr "" +"Обычно man:kgdb[1] должен быть способен найти ядро, работавшее в момент " +"создания дампа. Если он не может найти нужное ядро, передайте путь к ядру и " +"дампу в качестве двух аргументов для kgdb:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:199 +#, no-wrap +msgid "# kgdb /boot/kernel/kernel /var/crash/vmcore.0\n" +msgstr "# kgdb /boot/kernel/kernel /var/crash/vmcore.0\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:202 +msgid "" +"You can debug the crash dump using the kernel sources just like you can for " +"any other program." +msgstr "" +"Вы можете отлаживать дамп аварийного завершения, используя исходные коды " +"ядра, так же, как и для любой другой программы." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:209 +msgid "" +"This dump is from a 5.2-BETA kernel and the crash comes from deep within the " +"kernel. The output below has been modified to include line numbers on the " +"left. This first trace inspects the instruction pointer and obtains a back " +"trace. The address that is used on line 41 for the `list` command is the " +"instruction pointer and can be found on line 17. Most developers will " +"request having at least this information sent to them if you are unable to " +"debug the problem yourself. If, however, you do solve the problem, make " +"sure that your patch winds its way into the source tree via a problem " +"report, mailing lists, or by being able to commit it!" +msgstr "" +"Этот дамп получен из ядра версии 5.2-BETA, а крах произошел глубоко внутри " +"ядра. Приведенный ниже вывод был изменен для добавления номеров строк слева. " +"Первый трассировочный вывод проверяет указатель инструкции и получает " +"обратную трассировку. Адрес, используемый в строке 41 для команды `list`, " +"является указателем инструкции и может быть найден в строке 17. Большинство " +"разработчиков запросят как минимум эту информацию, если вы не сможете " +"отладить проблему самостоятельно. Однако, если вы решите проблему, " +"убедитесь, что ваш патч попадет в дерево исходников через отчёт о проблеме, " +"списки рассылки, или, может быть, у вас есть возможность его закоммитить!" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:302 +#, no-wrap +msgid "" +" 1:# cd /usr/obj/usr/src/sys/KERNCONF\n" +" 2:# kgdb kernel.debug /var/crash/vmcore.0\n" +" 3:GNU gdb 5.2.1 (FreeBSD)\n" +" 4:Copyright 2002 Free Software Foundation, Inc.\n" +" 5:GDB is free software, covered by the GNU General Public License, and you are\n" +" 6:welcome to change it and/or distribute copies of it under certain conditions.\n" +" 7:Type \"show copying\" to see the conditions.\n" +" 8:There is absolutely no warranty for GDB. Type \"show warranty\" for details.\n" +" 9:This GDB was configured as \"i386-undermydesk-freebsd\"...\n" +"10:panic: page fault\n" +"11:panic messages:\n" +"12:---\n" +"13:Fatal trap 12: page fault while in kernel mode\n" +"14:cpuid = 0; apic id = 00\n" +"15:fault virtual address = 0x300\n" +"16:fault code: = supervisor read, page not present\n" +"17:instruction pointer = 0x8:0xc0713860\n" +"18:stack pointer = 0x10:0xdc1d0b70\n" +"19:frame pointer = 0x10:0xdc1d0b7c\n" +"20:code segment = base 0x0, limit 0xfffff, type 0x1b\n" +"21: = DPL 0, pres 1, def32 1, gran 1\n" +"22:processor eflags = resume, IOPL = 0\n" +"23:current process = 14394 (uname)\n" +"24:trap number = 12\n" +"25:panic: page fault\n" +"26 cpuid = 0;\n" +"27:Stack backtrace:\n" +"28\n" +"29:syncing disks, buffers remaining... 2199 2199 panic: mi_switch: switch in a critical section\n" +"30:cpuid = 0;\n" +"31:Uptime: 2h43m19s\n" +"32:Dumping 255 MB\n" +"33: 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240\n" +"34:---\n" +"35:Reading symbols from /boot/kernel/snd_maestro3.ko...done.\n" +"36:Loaded symbols for /boot/kernel/snd_maestro3.ko\n" +"37:Reading symbols from /boot/kernel/snd_pcm.ko...done.\n" +"38:Loaded symbols for /boot/kernel/snd_pcm.ko\n" +"39:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240\n" +"40:240 dumping++;\n" +"41:(kgdb) list *0xc0713860\n" +"42:0xc0713860 is in lapic_ipi_wait (/usr/src/sys/i386/i386/local_apic.c:663).\n" +"43:658 incr = 0;\n" +"44:659 delay = 1;\n" +"45:660 } else\n" +"46:661 incr = 1;\n" +"47:662 for (x = 0; x < delay; x += incr) {\n" +"48:663 if ((lapic->icr_lo & APIC_DELSTAT_MASK) == APIC_DELSTAT_IDLE)\n" +"49:664 return (1);\n" +"50:665 ia32_pause();\n" +"51:666 }\n" +"52:667 return (0);\n" +"53:(kgdb) backtrace\n" +"54:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240\n" +"55:#1 0xc055fd9b in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:372\n" +"56:#2 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550\n" +"57:#3 0xc0567ef5 in mi_switch () at /usr/src/sys/kern/kern_synch.c:470\n" +"58:#4 0xc055fa87 in boot (howto=256) at /usr/src/sys/kern/kern_shutdown.c:312\n" +"59:#5 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550\n" +"60:#6 0xc0720c66 in trap_fatal (frame=0xdc1d0b30, eva=0)\n" +"61: at /usr/src/sys/i386/i386/trap.c:821\n" +"62:#7 0xc07202b3 in trap (frame=\n" +"63: {tf_fs = -1065484264, tf_es = -1065484272, tf_ds = -1065484272, tf_edi = 1, tf_esi = 0, tf_ebp = -602076292, tf_isp = -602076324, tf_ebx = 0, tf_edx = 0, tf_ecx = 1000000, tf_eax = 243, tf_trapno = 12, tf_err = 0, tf_eip = -1066321824, tf_cs = 8, tf_eflags = 65671, tf_esp = 243, tf_ss = 0})\n" +"64: at /usr/src/sys/i386/i386/trap.c:250\n" +"65:#8 0xc070c9f8 in calltrap () at {standard input}:94\n" +"66:#9 0xc07139f3 in lapic_ipi_vectored (vector=0, dest=0)\n" +"67: at /usr/src/sys/i386/i386/local_apic.c:733\n" +"68:#10 0xc0718b23 in ipi_selected (cpus=1, ipi=1)\n" +"69: at /usr/src/sys/i386/i386/mp_machdep.c:1115\n" +"70:#11 0xc057473e in kseq_notify (ke=0xcc05e360, cpu=0)\n" +"71: at /usr/src/sys/kern/sched_ule.c:520\n" +"72:#12 0xc0575cad in sched_add (td=0xcbcf5c80)\n" +"73: at /usr/src/sys/kern/sched_ule.c:1366\n" +"74:#13 0xc05666c6 in setrunqueue (td=0xcc05e360)\n" +"75: at /usr/src/sys/kern/kern_switch.c:422\n" +"76:#14 0xc05752f4 in sched_wakeup (td=0xcbcf5c80)\n" +"77: at /usr/src/sys/kern/sched_ule.c:999\n" +"78:#15 0xc056816c in setrunnable (td=0xcbcf5c80)\n" +"79: at /usr/src/sys/kern/kern_synch.c:570\n" +"80:#16 0xc0567d53 in wakeup (ident=0xcbcf5c80)\n" +"81: at /usr/src/sys/kern/kern_synch.c:411\n" +"82:#17 0xc05490a8 in exit1 (td=0xcbcf5b40, rv=0)\n" +"83: at /usr/src/sys/kern/kern_exit.c:509\n" +"84:#18 0xc0548011 in sys_exit () at /usr/src/sys/kern/kern_exit.c:102\n" +"85:#19 0xc0720fd0 in syscall (frame=\n" +"86: {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 0, tf_esi = -1, tf_ebp = -1077940712, tf_isp = -602075788, tf_ebx = 672411944, tf_edx = 10, tf_ecx = 672411600, tf_eax = 1, tf_trapno = 12, tf_err = 2, tf_eip = 671899563, tf_cs = 31, tf_eflags = 642, tf_esp = -1077940740, tf_ss = 47})\n" +"87: at /usr/src/sys/i386/i386/trap.c:1010\n" +"88:#20 0xc070ca4d in Xint0x80_syscall () at {standard input}:136\n" +"89:---Can't read userspace from dump, or kernel process---\n" +"90:(kgdb) quit\n" +msgstr "" +" 1:# cd /usr/obj/usr/src/sys/KERNCONF\n" +" 2:# kgdb kernel.debug /var/crash/vmcore.0\n" +" 3:GNU gdb 5.2.1 (FreeBSD)\n" +" 4:Copyright 2002 Free Software Foundation, Inc.\n" +" 5:GDB is free software, covered by the GNU General Public License, and you are\n" +" 6:welcome to change it and/or distribute copies of it under certain conditions.\n" +" 7:Type \"show copying\" to see the conditions.\n" +" 8:There is absolutely no warranty for GDB. Type \"show warranty\" for details.\n" +" 9:This GDB was configured as \"i386-undermydesk-freebsd\"...\n" +"10:panic: page fault\n" +"11:panic messages:\n" +"12:---\n" +"13:Fatal trap 12: page fault while in kernel mode\n" +"14:cpuid = 0; apic id = 00\n" +"15:fault virtual address = 0x300\n" +"16:fault code: = supervisor read, page not present\n" +"17:instruction pointer = 0x8:0xc0713860\n" +"18:stack pointer = 0x10:0xdc1d0b70\n" +"19:frame pointer = 0x10:0xdc1d0b7c\n" +"20:code segment = base 0x0, limit 0xfffff, type 0x1b\n" +"21: = DPL 0, pres 1, def32 1, gran 1\n" +"22:processor eflags = resume, IOPL = 0\n" +"23:current process = 14394 (uname)\n" +"24:trap number = 12\n" +"25:panic: page fault\n" +"26 cpuid = 0;\n" +"27:Stack backtrace:\n" +"28\n" +"29:syncing disks, buffers remaining... 2199 2199 panic: mi_switch: switch in a critical section\n" +"30:cpuid = 0;\n" +"31:Uptime: 2h43m19s\n" +"32:Dumping 255 MB\n" +"33: 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240\n" +"34:---\n" +"35:Reading symbols from /boot/kernel/snd_maestro3.ko...done.\n" +"36:Loaded symbols for /boot/kernel/snd_maestro3.ko\n" +"37:Reading symbols from /boot/kernel/snd_pcm.ko...done.\n" +"38:Loaded symbols for /boot/kernel/snd_pcm.ko\n" +"39:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240\n" +"40:240 dumping++;\n" +"41:(kgdb) list *0xc0713860\n" +"42:0xc0713860 is in lapic_ipi_wait (/usr/src/sys/i386/i386/local_apic.c:663).\n" +"43:658 incr = 0;\n" +"44:659 delay = 1;\n" +"45:660 } else\n" +"46:661 incr = 1;\n" +"47:662 for (x = 0; x < delay; x += incr) {\n" +"48:663 if ((lapic->icr_lo & APIC_DELSTAT_MASK) == APIC_DELSTAT_IDLE)\n" +"49:664 return (1);\n" +"50:665 ia32_pause();\n" +"51:666 }\n" +"52:667 return (0);\n" +"53:(kgdb) backtrace\n" +"54:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240\n" +"55:#1 0xc055fd9b in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:372\n" +"56:#2 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550\n" +"57:#3 0xc0567ef5 in mi_switch () at /usr/src/sys/kern/kern_synch.c:470\n" +"58:#4 0xc055fa87 in boot (howto=256) at /usr/src/sys/kern/kern_shutdown.c:312\n" +"59:#5 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550\n" +"60:#6 0xc0720c66 in trap_fatal (frame=0xdc1d0b30, eva=0)\n" +"61: at /usr/src/sys/i386/i386/trap.c:821\n" +"62:#7 0xc07202b3 in trap (frame=\n" +"63: {tf_fs = -1065484264, tf_es = -1065484272, tf_ds = -1065484272, tf_edi = 1, tf_esi = 0, tf_ebp = -602076292, tf_isp = -602076324, tf_ebx = 0, tf_edx = 0, tf_ecx = 1000000, tf_eax = 243, tf_trapno = 12, tf_err = 0, tf_eip = -1066321824, tf_cs = 8, tf_eflags = 65671, tf_esp = 243, tf_ss = 0})\n" +"64: at /usr/src/sys/i386/i386/trap.c:250\n" +"65:#8 0xc070c9f8 in calltrap () at {standard input}:94\n" +"66:#9 0xc07139f3 in lapic_ipi_vectored (vector=0, dest=0)\n" +"67: at /usr/src/sys/i386/i386/local_apic.c:733\n" +"68:#10 0xc0718b23 in ipi_selected (cpus=1, ipi=1)\n" +"69: at /usr/src/sys/i386/i386/mp_machdep.c:1115\n" +"70:#11 0xc057473e in kseq_notify (ke=0xcc05e360, cpu=0)\n" +"71: at /usr/src/sys/kern/sched_ule.c:520\n" +"72:#12 0xc0575cad in sched_add (td=0xcbcf5c80)\n" +"73: at /usr/src/sys/kern/sched_ule.c:1366\n" +"74:#13 0xc05666c6 in setrunqueue (td=0xcc05e360)\n" +"75: at /usr/src/sys/kern/kern_switch.c:422\n" +"76:#14 0xc05752f4 in sched_wakeup (td=0xcbcf5c80)\n" +"77: at /usr/src/sys/kern/sched_ule.c:999\n" +"78:#15 0xc056816c in setrunnable (td=0xcbcf5c80)\n" +"79: at /usr/src/sys/kern/kern_synch.c:570\n" +"80:#16 0xc0567d53 in wakeup (ident=0xcbcf5c80)\n" +"81: at /usr/src/sys/kern/kern_synch.c:411\n" +"82:#17 0xc05490a8 in exit1 (td=0xcbcf5b40, rv=0)\n" +"83: at /usr/src/sys/kern/kern_exit.c:509\n" +"84:#18 0xc0548011 in sys_exit () at /usr/src/sys/kern/kern_exit.c:102\n" +"85:#19 0xc0720fd0 in syscall (frame=\n" +"86: {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 0, tf_esi = -1, tf_ebp = -1077940712, tf_isp = -602075788, tf_ebx = 672411944, tf_edx = 10, tf_ecx = 672411600, tf_eax = 1, tf_trapno = 12, tf_err = 2, tf_eip = 671899563, tf_cs = 31, tf_eflags = 642, tf_esp = -1077940740, tf_ss = 47})\n" +"87: at /usr/src/sys/i386/i386/trap.c:1010\n" +"88:#20 0xc070ca4d in Xint0x80_syscall () at {standard input}:136\n" +"89:---Can't read userspace from dump, or kernel process---\n" +"90:(kgdb) quit\n" + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:308 +msgid "" +"If your system is crashing regularly and you are running out of disk space, " +"deleting old [.filename]#vmcore# files in [.filename]#/var/crash# could save " +"a considerable amount of disk space!" +msgstr "" +"Если ваша система регулярно завершается аварийно и у вас заканчивается место " +"на диске, удаление старых файлов [.filename]#vmcore# в [.filename]#/var/" +"crash# может освободить значительное количество дискового пространства!" + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:311 +#, no-wrap +msgid "On-Line Kernel Debugging Using DDB" +msgstr "Онлайн-отладка ядра с использованием DDB" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:315 +msgid "" +"While `kgdb` as an off-line debugger provides a very high level of user " +"interface, there are some things it cannot do. The most important ones " +"being breakpointing and single-stepping kernel code." +msgstr "" +"В то время как `kgdb` как автономный отладчик предоставляет очень высокий " +"уровень пользовательского интерфейса, есть некоторые вещи, которые он не " +"может выполнить. Наиболее важные из них — установка точек останова и " +"пошаговое выполнение кода ядра." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:319 +msgid "" +"If you need to do low-level debugging on your kernel, there is an on-line " +"debugger available called DDB. It allows setting of breakpoints, single-" +"stepping kernel functions, examining and changing kernel variables, etc. " +"However, it cannot access kernel source files, and only has access to the " +"global and static symbols, not to the full debug information like `kgdb` " +"does." +msgstr "" +"Если вам требуется выполнить низкоуровневую отладку ядра, доступен отладчик " +"DDB, работающий в режиме реального времени. Он позволяет устанавливать точки " +"останова, выполнять пошаговое выполнение функций ядра, проверять и изменять " +"переменные ядра и т.д. Однако он не имеет доступа к исходным файлам ядра и " +"работает только с глобальными и статическими символами, без доступа к полной " +"отладочной информации, как это делает `kgdb`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:321 +msgid "To configure your kernel to include DDB, add the options" +msgstr "Для настройки ядра с включенной поддержкой DDB добавьте параметры" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:324 +#, no-wrap +msgid "options KDB\n" +msgstr "options KDB\n" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:329 +#, no-wrap +msgid "options DDB\n" +msgstr "options DDB\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:333 +msgid "" +"to your config file, and rebuild. (See extref:{handbook}[The FreeBSD " +"Handbook] for details on configuring the FreeBSD kernel)." +msgstr "" +"в ваш конфигурационный файл, и пересоберите. (Подробности о настройке ядра " +"FreeBSD см. в extref:{handbook}[Руководстве FreeBSD])." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:339 +msgid "" +"Once your DDB kernel is running, there are several ways to enter DDB. The " +"first, and earliest way is to use the boot flag `-d`. The kernel will start " +"up in debug mode and enter DDB prior to any device probing. Hence you can " +"even debug the device probe/attach functions. To use this, exit the " +"loader's boot menu and enter `boot -d` at the loader prompt." +msgstr "" +"После загрузки ядра DDB существует несколько способов войти в него. Первый и " +"самый ранний способ — использовать флаг загрузки `-d`. Ядро запустится в " +"режиме отладки и перейдет в DDB до начала обнаружения любого из устройств. " +"Таким образом, можно отлаживать даже функции обнаружить (probe)/ " +"присоединить (attach) устройств. Для использования этого метода выйдите из " +"меню загрузки загрузчика и введите `boot -d` в командной строке загрузчика." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:343 +msgid "" +"The second scenario is to drop to the debugger once the system has booted. " +"There are two simple ways to accomplish this. If you would like to break to " +"the debugger from the command prompt, simply type the command:" +msgstr "" +"Второй сценарий — перейти в отладчик после загрузки системы. Есть два " +"простых способа это сделать. Если вы хотите перейти в отладчик из командной " +"строки, просто введите команду:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:347 +#, no-wrap +msgid "# sysctl debug.kdb.enter=1\n" +msgstr "# sysctl debug.kdb.enter=1\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:354 +msgid "" +"Alternatively, if you are at the system console, you may use a hot-key on " +"the keyboard. The default break-to-debugger sequence is kbd:[Ctrl+Alt" +"+ESC]. For syscons, this sequence can be remapped and some of the " +"distributed maps out there do this, so check to make sure you know the right " +"sequence to use. There is an option available for serial consoles that " +"allows the use of a serial line BREAK on the console line to enter DDB " +"(`options BREAK_TO_DEBUGGER` in the kernel config file). It is not the " +"default since there are a lot of serial adapters around that gratuitously " +"generate a BREAK condition, for example when pulling the cable." +msgstr "" +"В качестве альтернативы, если вы находитесь за системной консолью, можно " +"использовать горячую клавишу на клавиатуре. Стандартной комбинацией для " +"перехода в отладчик является kbd:[Ctrl+Alt+ESC]. В syscons эта " +"последовательность может быть переназначена, и некоторые распространённые " +"раскладки клавиатуры делают это, поэтому убедитесь, что знаете правильную " +"комбинацию. Для последовательных консолей доступна опция, позволяющая " +"использовать сигнал BREAK на линии консоли для входа в DDB (`options " +"BREAK_TO_DEBUGGER` в конфигурационном файле ядра). Это не установлено по " +"умолчанию, так как существует множество последовательных адаптеров, которые " +"излишне генерируют условие BREAK, например, при отключении кабеля." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:357 +msgid "" +"The third way is that any panic condition will branch to DDB if the kernel " +"is configured to use it. For this reason, it is not wise to configure a " +"kernel with DDB for a machine running unattended." +msgstr "" +"Третий способ заключается в том, чтобы любое условие паники переходило в " +"DDB, если ядро настроено на его использование. По этой причине не " +"рекомендуется настраивать ядро с DDB для машины, работающей без присмотра." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:359 +msgid "To obtain the unattended functionality, add:" +msgstr "Для получения неинтерактивной функциональности добавьте:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:363 +#, no-wrap +msgid "options\tKDB_UNATTENDED\n" +msgstr "options\tKDB_UNATTENDED\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:366 +msgid "to the kernel configuration file and rebuild/reinstall." +msgstr "в файл конфигурации ядра и пересоберите/переустановите ядро." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:369 +msgid "" +"The DDB commands roughly resemble some `gdb` commands. The first thing you " +"probably need to do is to set a breakpoint:" +msgstr "" +"Команды DDB примерно напоминают некоторые команды `gdb`. Первое, что вам, " +"вероятно, нужно сделать, это установить точку останова:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:373 +#, no-wrap +msgid " break function-name address\n" +msgstr " break function-name address\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:378 +msgid "" +"Numbers are taken hexadecimal by default, but to make them distinct from " +"symbol names; hexadecimal numbers starting with the letters `a-f` need to be " +"preceded with `0x` (this is optional for other numbers). Simple expressions " +"are allowed, for example: `function-name + 0x103`." +msgstr "" +"Числа по умолчанию интерпретируются как шестнадцатеричные, но чтобы отличить " +"их от символьных имен, шестнадцатеричные числа, начинающиеся с букв `a-f`, " +"должны предваряться префиксом `0x` (для остальных чисел это необязательно). " +"Допускаются простые выражения, например: `function-name + 0x103`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:380 +msgid "To exit the debugger and continue execution, type:" +msgstr "Для выхода из отладчика и продолжения выполнения введите:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:384 +#, no-wrap +msgid " continue\n" +msgstr " continue\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:387 +msgid "To get a stack trace of the current thread, use:" +msgstr "Для получения трассировки стека текущего потока используйте:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:391 +#, no-wrap +msgid " trace\n" +msgstr " trace\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:394 +msgid "" +"To get a stack trace of an arbitrary thread, specify a process ID or thread " +"ID as a second argument to `trace`." +msgstr "" +"Для получения трассировки стека произвольного потока укажите идентификатор " +"процесса или идентификатор потока в качестве второго аргумента команды " +"`trace`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:396 +msgid "If you want to remove a breakpoint, use" +msgstr "Если вы хотите удалить точку останова, используйте" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:401 +#, no-wrap +msgid "" +" del\n" +" del address-expression\n" +msgstr "" +" del\n" +" del address-expression\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:405 +msgid "" +"The first form will be accepted immediately after a breakpoint hit, and " +"deletes the current breakpoint. The second form can remove any breakpoint, " +"but you need to specify the exact address; this can be obtained from:" +msgstr "" +"Первая форма будет принята сразу после срабатывания точки останова и удаляет " +"текущую точку останова. Вторая форма может удалить любую точку останова, но " +"необходимо указать точный адрес; его можно получить из:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:409 +#, no-wrap +msgid " show b\n" +msgstr " show b\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:412 +msgid "or:" +msgstr "или:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:416 +#, no-wrap +msgid " show break\n" +msgstr " show break\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:419 +msgid "To single-step the kernel, try:" +msgstr "Для пошагового выполнения ядра попробуйте:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:423 +#, no-wrap +msgid " s\n" +msgstr " s\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:426 +msgid "" +"This will step into functions, but you can make DDB trace them until the " +"matching return statement is reached by:" +msgstr "" +"Это позволит войти в функции, но вы можете заставить DDB отслеживать их до " +"достижения соответствующего оператора return с помощью:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:430 +#, no-wrap +msgid " n\n" +msgstr " n\n" + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:436 +msgid "" +"This is different from ``gdb``'s `next` statement; it is like ``gdb``'s " +"`finish`. Pressing kbd:[n] more than once will cause a continue." +msgstr "" +"Это отличается от оператора `next` в ``gdb``; это похоже на `finish` в " +"``gdb``. Нажатие kbd:[n] более одного раза приведёт к продолжению." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:439 +msgid "To examine data from memory, use (for example):" +msgstr "Для просмотра данных в памяти используйте (например):" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:446 +#, no-wrap +msgid "" +" x/wx 0xf0133fe0,40\n" +" x/hd db_symtab_space\n" +" x/bc termbuf,10\n" +" x/s stringbuf\n" +msgstr "" +" x/wx 0xf0133fe0,40\n" +" x/hd db_symtab_space\n" +" x/bc termbuf,10\n" +" x/s stringbuf\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:451 +msgid "" +"for word/halfword/byte access, and hexadecimal/decimal/character/ string " +"display. The number after the comma is the object count. To display the " +"next 0x10 items, simply use:" +msgstr "" +"для доступа к словам/полусловам/байтам и отображения в шестнадцатеричном/" +"десятичном/символьном/строковом формате. Число после запятой указывает " +"количество объектов. Для отображения следующих 0x10 элементов просто введите:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:455 +#, no-wrap +msgid " x ,10\n" +msgstr " x ,10\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:458 +msgid "Similarly, use" +msgstr "Аналогично, используйте" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:462 +#, no-wrap +msgid " x/ia foofunc,10\n" +msgstr " x/ia foofunc,10\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:465 +msgid "" +"to disassemble the first 0x10 instructions of `foofunc`, and display them " +"along with their offset from the beginning of `foofunc`." +msgstr "" +"для дизассемблирования первых 0x10 инструкций функции `foofunc` и их " +"отображения вместе с их смещением от начала `foofunc`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:467 +msgid "To modify memory, use the write command:" +msgstr "Для записи в память используйте команду write:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:472 +#, no-wrap +msgid "" +" w/b termbuf 0xa 0xb 0\n" +" w/w 0xf0010030 0 0\n" +msgstr "" +" w/b termbuf 0xa 0xb 0\n" +" w/w 0xf0010030 0 0\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:476 +msgid "" +"The command modifier (`b`/`h`/`w`) specifies the size of the data to be " +"written, the first following expression is the address to write to and the " +"remainder is interpreted as data to write to successive memory locations." +msgstr "" +"Модификатор команды (`b`/`h`/`w`) определяет размер данных для записи, " +"первое следующее выражение — это адрес для записи, а остальное " +"интерпретируется как данные для записи в последующие ячейки памяти." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:478 +msgid "If you need to know the current registers, use:" +msgstr "Если вам необходимо узнать текущее содержимое регистров, введите:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:482 +#, no-wrap +msgid " show reg\n" +msgstr " show reg\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:485 +msgid "Alternatively, you can display a single register value by e.g." +msgstr "Также можно отобразить значение одного регистра, например:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:489 +#, no-wrap +msgid " p $eax\n" +msgstr " p $eax\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:492 +msgid "and modify it by:" +msgstr "и изменить его с помощью:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:496 +#, no-wrap +msgid " set $eax new-value\n" +msgstr " set $eax new-value\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:499 +msgid "Should you need to call some kernel functions from DDB, simply say:" +msgstr "" +"Если вам потребуется вызвать некоторые функции ядра из DDB, просто напишите:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:503 +#, no-wrap +msgid " call func(arg1, arg2, ...)\n" +msgstr " call func(arg1, arg2, ...)\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:506 +msgid "The return value will be printed." +msgstr "Будет выведено возвращаемое значение." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:508 +msgid "For a man:ps[1] style summary of all running processes, use:" +msgstr "" +"Для вывода информации о всех запущенных процессах в стиле man:ps[1] " +"используйте:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:512 +#, no-wrap +msgid " ps\n" +msgstr " ps\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:517 +msgid "" +"Now you have examined why your kernel failed, and you wish to reboot. " +"Remember that, depending on the severity of previous malfunctioning, not all " +"parts of the kernel might still be working as expected. Perform one of the " +"following actions to shut down and reboot your system:" +msgstr "" +"Теперь вы выяснили причину сбоя ядра и хотите выполнить перезагрузку. " +"Помните, что в зависимости от серьезности предыдущего сбоя не все части ядра " +"могут работать корректно. Выполните одно из следующих действий для " +"завершения работы и перезагрузки системы:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:521 +#, no-wrap +msgid " panic\n" +msgstr " panic\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:524 +msgid "" +"This will cause your kernel to dump core and reboot, so you can later " +"analyze the core on a higher level with man:kgdb[1]." +msgstr "" +"Это приведёт к дампу ядра и перезагрузке, чтобы позже можно было " +"проанализировать дамп на более высоком уровне с помощью man:kgdb[1]." + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:528 +#, no-wrap +msgid " call boot(0)\n" +msgstr " call boot(0)\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:532 +msgid "" +"Might be a good way to cleanly shut down the running system, `sync()` all " +"disks, and finally, in some cases, reboot. As long as the disk and " +"filesystem interfaces of the kernel are not damaged, this could be a good " +"way for an almost clean shutdown." +msgstr "" +"Может быть хорошим способом чисто завершить работу работающей системы, " +"`sync()` все диски и, наконец, в некоторых случаях перезагрузиться. Пока " +"интерфейсы дисков и файловых систем ядра не повреждены, это может быть " +"хорошим способом для почти чистого завершения работы." + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:536 +#, no-wrap +msgid " reset\n" +msgstr " reset\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:539 +msgid "" +"This is the final way out of disaster and almost the same as hitting the Big " +"Red Button." +msgstr "" +"Это последний способ избежать катастрофы, и он почти такой же, как нажатие " +"на Большую Красную Кнопку." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:541 +msgid "If you need a short command summary, simply type:" +msgstr "Если вам нужна краткая сводка команд, просто введите:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:545 +#, no-wrap +msgid " help\n" +msgstr " help\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:549 +msgid "" +"It is highly recommended to have a printed copy of the man:ddb[4] manual " +"page ready for a debugging session. Remember that it is hard to read the on-" +"line manual while single-stepping the kernel." +msgstr "" +"Настоятельно рекомендуется иметь распечатанную копию страницы руководства " +"man:ddb[4] для сеанса отладки. Помните, что читать онлайн-руководство во " +"время пошагового выполнения ядра сложно." + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:551 +#, no-wrap +msgid "On-Line Kernel Debugging Using Remote GDB" +msgstr "Онлайн-отладка ядра с использованием удаленного GDB" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:555 +msgid "" +"The FreeBSD kernel provides a second KDB backend for on-line debugging: man:" +"gdb[4]. This feature has been supported since FreeBSD 2.2, and it is " +"actually a very neat one." +msgstr "" +"Ядро FreeBSD предоставляет второй бэкенд KDB для отладки в реальном времени: " +"man:gdb[4]. Эта возможность поддерживается с FreeBSD 2.2 и является " +"действительно очень удобной." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:561 +msgid "" +"GDB has supported _remote debugging_ for a long time. This is done using a " +"very simple protocol along a serial line. Unlike the other debugging " +"methods described above, you will need two machines for doing this. One is " +"the host providing the debugging environment, including all the sources, and " +"a copy of the kernel binary with all the symbols in it. The other is the " +"target machine that runs a copy of the very same kernel (optionally stripped " +"of the debugging information)." +msgstr "" +"GDB давно поддерживает _удалённую отладку_. Это осуществляется с помощью " +"очень простого протокола через последовательное соединение. В отличие от " +"других методов отладки, описанных выше, для этого потребуются две машины. " +"Одна — это хост, предоставляющий среду отладки, включая все исходные тексты " +"и копию бинарного файла ядра со всеми символами. Другая — целевая машина, на " +"которой запущена копия того же самого ядра (возможно, без отладочной " +"информации)." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:563 +msgid "" +"In order to use remote GDB, ensure that the following options are present in " +"your kernel configuration:" +msgstr "" +"Чтобы использовать удалённый GDB, убедитесь, что следующие параметры " +"присутствуют в конфигурации вашего ядра:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:568 +#, no-wrap +msgid "" +"makeoptions DEBUG=-g\n" +"options KDB\n" +"options GDB\n" +msgstr "" +"makeoptions DEBUG=-g\n" +"options KDB\n" +"options GDB\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:571 +msgid "" +"Note that the `GDB` option is turned off by default in `GENERIC` kernels on -" +"STABLE and -RELEASE branches, but enabled on -CURRENT." +msgstr "" +"Обратите внимание, что опция `GDB` отключена по умолчанию в ядрах `GENERIC` " +"для веток -STABLE и -RELEASE, но включена в -CURRENT." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:575 +msgid "" +"Once built, copy the kernel to the target machine, and boot it. Connect the " +"serial line of the target machine that has \"flags 080\" set on its uart " +"device to any serial line of the debugging host. See man:uart[4] for " +"information on how to set the flags on a uart device." +msgstr "" +"После сборки скопируйте ядро на целевую машину и загрузите его. Подключите " +"последовательный порт целевой машины, у которого на устройстве uart " +"установлены флаги \"080\", к любому последовательному порту отладочной " +"машины. Подробности о настройке флагов на устройстве uart смотрите в man:" +"uart[4]." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:578 +msgid "" +"The target machine must be made to enter the GDB backend, either due to a " +"panic or by taking a purposeful trap into the debugger. Before doing this, " +"select the GDB debugger backend:" +msgstr "" +"Целевая машина должна быть переведена в режим отладчика GDB, либо из-за " +"паники, либо путем преднамеренного перехода в отладчик. Перед этим выберите " +"бэкенд отладчика GDB:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:582 +#, no-wrap +msgid "" +"# sysctl debug.kdb.current=gdb\n" +"debug.kdb.current: ddb -> gdb\n" +msgstr "" +"# sysctl debug.kdb.current=gdb\n" +"debug.kdb.current: ddb -> gdb\n" + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:589 +msgid "" +"The supported backends can be listed by the `debug.kdb.available` sysctl. " +"If the kernel configuration includes `options DDB`, then man:ddb[4] will be " +"selected by default. If `gdb` does not appear in the list of available " +"backends, then the debug serial port may not have been configured correctly." +msgstr "" +"Поддерживаемые бэкенды можно вывести с помощью sysctl `debug.kdb.available`. " +"Если конфигурация ядра включает `options DDB`, то man:ddb[4] будет выбран по " +"умолчанию. Если `gdb` не отображается в списке доступных бэкендов, значит, " +"последовательный порт отладки может быть настроен неправильно." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:592 +msgid "Then, force entry to the debugger:" +msgstr "Затем принудительно войдите в отладчик:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:596 +#, no-wrap +msgid "" +"# sysctl debug.kdb.enter=1\n" +"debug.kdb.enter: 0KDB: enter: sysctl debug.kdb.enter\n" +msgstr "" +"# sysctl debug.kdb.enter=1\n" +"debug.kdb.enter: 0KDB: enter: sysctl debug.kdb.enter\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:600 +msgid "" +"The target machine now awaits connection from a remote GDB client. On the " +"debugging machine, go to the compile directory of the target kernel, and " +"start `gdb`:" +msgstr "" +"Целевая машина теперь ожидает подключения от удалённого клиента GDB. На " +"машине для отладки перейдите в каталог сборки целевого ядра и запустите " +"`gdb`:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:611 +#, no-wrap +msgid "" +"# cd /usr/obj/usr/src/amd64.amd64/sys/GENERIC/\n" +"# kgdb kernel\n" +"GNU gdb (GDB) 10.2 [GDB v10.2 for FreeBSD]\n" +"Copyright (C) 2021 Free Software Foundation, Inc.\n" +"...\n" +"Reading symbols from kernel...\n" +"Reading symbols from /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.debug...\n" +"(kgdb)\n" +msgstr "" +"# cd /usr/obj/usr/src/amd64.amd64/sys/GENERIC/\n" +"# kgdb kernel\n" +"GNU gdb (GDB) 10.2 [GDB v10.2 for FreeBSD]\n" +"Copyright (C) 2021 Free Software Foundation, Inc.\n" +"...\n" +"Reading symbols from kernel...\n" +"Reading symbols from /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.debug...\n" +"(kgdb)\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:614 +msgid "" +"Initialize the remote debugging session (assuming the first serial port is " +"being used) by:" +msgstr "" +"Инициализируйте сеанс удаленной отладки (предполагая, что используется " +"первый последовательный порт) с помощью:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:618 +#, no-wrap +msgid "(kgdb) target remote /dev/cuau0\n" +msgstr "(kgdb) target remote /dev/cuau0\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:621 +msgid "Your hosting GDB will now gain control over the target kernel:" +msgstr "Ваш хостинг GDB теперь получит контроль над целевым ядром:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:628 +#, no-wrap +msgid "" +"Remote debugging using /dev/cuau0\n" +"kdb_enter (why=<optimized out>, msg=<optimized out>) at /usr/src/sys/kern/subr_kdb.c:506\n" +"506 kdb_why = KDB_WHY_UNSET;\n" +"(kgdb)\n" +msgstr "" +"Remote debugging using /dev/cuau0\n" +"kdb_enter (why=<optimized out>, msg=<optimized out>) at /usr/src/sys/kern/subr_kdb.c:506\n" +"506 kdb_why = KDB_WHY_UNSET;\n" +"(kgdb)\n" + +#. type: delimited block = 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:636 +msgid "" +"Depending on the compiler used, some local variables may appear as " +"`<optimized out>`, preventing them from being inspected directly by `gdb`. " +"If this causes problems while debugging, it is possible to build the kernel " +"at a decreased optimization level, which may improve the visibility of some " +"variables. This can be done by passing `COPTFLAGS=-O1` to man:make[1]. " +"However, certain classes of kernel bugs may manifest differently (or not at " +"all) when the optimization level is changed." +msgstr "" +"В зависимости от используемого компилятора, некоторые локальные переменные " +"могут отображаться как `<optimized out>`, что не позволяет их напрямую " +"исследовать с помощью `gdb`. Если это вызывает проблемы при отладке, можно " +"собрать ядро с пониженным уровнем оптимизации, что может улучшить видимость " +"некоторых переменных. Это можно сделать, передав `COPTFLAGS=-O1` в man:" +"make[1]. Однако определённые классы ошибок в ядре могут проявляться иначе " +"(или вообще не проявляться) при изменении уровня оптимизации." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:640 +msgid "" +"You can use this session almost as any other GDB session, including full " +"access to the source, running it in gud-mode inside an Emacs window (which " +"gives you an automatic source code display in another Emacs window), etc." +msgstr "" +"Вы можете использовать этот сеанс почти как любой другой сеанс GDB, включая " +"полный доступ к исходному коду, запуск в режиме gud (Grand Unified Debugger) " +"внутри окна Emacs (что дает автоматическое отображение исходного кода в " +"другом окне Emacs) и т.д." + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:642 +#, no-wrap +msgid "Debugging a Console Driver" +msgstr "Отладка драйвера консоли" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:648 +msgid "" +"Since you need a console driver to run DDB on, things are more complicated " +"if the console driver itself is failing. You might remember the use of a " +"serial console (either with modified boot blocks, or by specifying `-h` at " +"the `Boot:` prompt), and hook up a standard terminal onto your first serial " +"port. DDB works on any configured console driver, including a serial " +"console." +msgstr "" +"Поскольку для работы DDB требуется драйвер консоли, ситуация усложняется, " +"если сам драйвер консоли неисправен. Возможно, вы вспомните о возможности " +"использования последовательной консоли (либо с модифицированными " +"загрузочными блоками, либо указав `-h` в строке `Boot:`), подключив " +"стандартный терминал к первому последовательному порту. DDB работает с любым " +"настроенным драйвером консоли, включая последовательную консоль." + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:650 +#, no-wrap +msgid "Debugging Deadlocks" +msgstr "Отладка взаимоблокировок" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:655 +msgid "" +"You may experience so called deadlocks, a situation where a system stops " +"doing useful work. To provide a helpful bug report in this situation, use " +"man:ddb[4] as described in the previous section. Include the output of `ps` " +"and `trace` for suspected processes in the report." +msgstr "" +"Вы можете столкнуться с так называемыми взаимоблокировками — ситуацией, " +"когда система перестает выполнять полезную работу. Чтобы предоставить " +"полезный отчёт об ошибке в такой ситуации, используйте man:ddb[4], как " +"описано в предыдущем разделе. Включите в отчёт вывод команд `ps` и `trace` " +"для подозрительных процессов." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:659 +msgid "" +"If possible, consider doing further investigation. The recipe below is " +"especially useful if you suspect that a deadlock occurs in the VFS layer. " +"Add these options to the kernel configuration file." +msgstr "" +"Если возможно, рассмотрите проведение дополнительного исследования. " +"Приведенный ниже рецепт особенно полезен, если вы подозреваете, что взаимная " +"блокировка происходит на уровне VFS. Добавьте следующие параметры в файл " +"конфигурации ядра." + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:670 +#, no-wrap +msgid "" +"makeoptions \tDEBUG=-g\n" +"options \tINVARIANTS\n" +"options \tINVARIANT_SUPPORT\n" +"options \tWITNESS\n" +"options \tWITNESS_SKIPSPIN\n" +"options \tDEBUG_LOCKS\n" +"options \tDEBUG_VFS_LOCKS\n" +"options \tDIAGNOSTIC\n" +msgstr "" +"makeoptions \tDEBUG=-g\n" +"options \tINVARIANTS\n" +"options \tINVARIANT_SUPPORT\n" +"options \tWITNESS\n" +"options \tWITNESS_SKIPSPIN\n" +"options \tDEBUG_LOCKS\n" +"options \tDEBUG_VFS_LOCKS\n" +"options \tDIAGNOSTIC\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:673 +msgid "" +"When a deadlock occurs, in addition to the output of the `ps` command, " +"provide information from the `show pcpu`, `show allpcpu`, `show locks`, " +"`show alllocks`, `show lockedvnods` and `alltrace`." +msgstr "" +"При возникновении взаимоблокировки, помимо вывода команды `ps`, предоставьте " +"информацию из `show pcpu`, `show allpcpu`, `show locks`, `show alllocks`, " +"`show lockedvnods` и `alltrace`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:675 +msgid "" +"To obtain meaningful backtraces for threaded processes, use `thread thread-" +"id` to switch to the thread stack, and do a backtrace with `where`." +msgstr "" +"Для получения осмысленных трассировок стека для потоковых процессов " +"используйте `thread thread-id` для переключения на стек потока и выполните " +"трассировку с помощью `where`." + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:677 +#, no-wrap +msgid "Kernel debugging with Dcons" +msgstr "Отладка ядра с помощью Dcons" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:683 +msgid "" +"man:dcons[4] is a very simple console driver that is not directly connected " +"with any physical devices. It just reads and writes characters from and to " +"a buffer in a kernel or loader. Due to its simple nature, it is very useful " +"for kernel debugging, especially with a FireWire(R) device. Currently, " +"FreeBSD provides two ways to interact with the buffer from outside of the " +"kernel using man:dconschat[8]." +msgstr "" +"man:dcons[4] — это очень простой драйвер консоли, который не связан напрямую " +"с какими-либо физическими устройствами. Он просто читает и записывает " +"символы из буфера в ядре или загрузчике и обратно. Благодаря своей простоте " +"он очень полезен для отладки ядра, особенно с устройством FireWire(R). В " +"настоящее время FreeBSD предоставляет два способа взаимодействия с буфером " +"извне ядра с помощью man:dconschat[8]." + +#. type: Title === +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:684 +#, no-wrap +msgid "Dcons over FireWire(R)" +msgstr "Dcons через FireWire(R)" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:692 +msgid "" +"Most FireWire(R) (IEEE1394) host controllers are based on the OHCI " +"specification that supports physical access to the host memory. This means " +"that once the host controller is initialized, we can access the host memory " +"without the help of software (kernel). We can exploit this facility for " +"interaction with man:dcons[4]. man:dcons[4] provides similar functionality " +"as a serial console. It emulates two serial ports, one for the console and " +"DDB, the other for GDB. Since remote memory access is fully handled by the " +"hardware, the man:dcons[4] buffer is accessible even when the system crashes." +msgstr "" +"Большинство контроллеров FireWire(R) (IEEE1394) основаны на спецификации " +"OHCI, которая поддерживает физический доступ к памяти хоста. Это означает, " +"что после инициализации контроллера хоста мы можем получить доступ к памяти " +"хоста без помощи программного обеспечения (ядра). Мы можем использовать эту " +"возможность для взаимодействия с man:dcons[4]. man:dcons[4] предоставляет " +"функциональность, аналогичную последовательной консоли. Он эмулирует два " +"последовательных порта: один для консоли и DDB, другой для GDB. Поскольку " +"удалённый доступ к памяти полностью обрабатывается аппаратным обеспечением, " +"буфер man:dcons[4] остаётся доступным даже при крахе системы." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:695 +msgid "" +"FireWire(R) devices are not limited to those integrated into motherboards. " +"PCI cards exist for desktops, and a cardbus interface can be purchased for " +"laptops." +msgstr "" +"Устройства FireWire(R) не только встраиваются в материнские платы. Для " +"настольных компьютеров существуют PCI-карты, а для ноутбуков можно " +"приобрести интерфейс CardBus." + +#. type: Title ==== +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:696 +#, no-wrap +msgid "Enabling FireWire(R) and Dcons support on the target machine" +msgstr "Включение поддержки FireWire(R) и Dcons на целевой машине" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:699 +msgid "" +"To enable FireWire(R) and Dcons support in the kernel of the _target " +"machine_:" +msgstr "Чтобы включить поддержку FireWire(R) и Dcons в ядре _целевой машины_:" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:701 +msgid "" +"Make sure your kernel supports `dcons`, `dcons_crom` and `firewire`. `Dcons` " +"should be statically linked with the kernel. For `dcons_crom` and " +"`firewire`, modules should be OK." +msgstr "" +"Убедитесь, что ваше ядро поддерживает `dcons`, `dcons_crom` и `firewire`. " +"`Dcons` должен быть статически связан с ядром. Для `dcons_crom` и `firewire` " +"модули должны подойти." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:702 +msgid "" +"Make sure physical DMA is enabled. You may need to add `hw.firewire." +"phydma_enable=1` to [.filename]#/boot/loader.conf#." +msgstr "" +"Убедитесь, что физический DMA включен. Возможно, потребуется добавить `hw." +"firewire.phydma_enable=1` в [.filename]#/boot/loader.conf#." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:703 +msgid "Add options for debugging." +msgstr "Добавьте параметры для отладки." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:704 +msgid "" +"Add `dcons_gdb=1` in [.filename]#/boot/loader.conf# if you use GDB over " +"FireWire(R)." +msgstr "" +"Добавьте `dcons_gdb=1` в [.filename]#/boot/loader.conf#, если вы используете " +"GDB через FireWire(R)." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:705 +msgid "Enable `dcons` in [.filename]#/etc/ttys#." +msgstr "Включите `dcons` в [.filename]#/etc/ttys#." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:706 +msgid "" +"Optionally, to force `dcons` to be the high-level console, add `hw.firewire." +"dcons_crom.force_console=1` to [.filename]#loader.conf#." +msgstr "" +"Это необязательно: чтобы принудительно сделать `dcons` высокоуровневой " +"консолью, добавьте `hw.firewire.dcons_crom.force_console=1` в [." +"filename]#loader.conf#." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:708 +msgid "" +"To enable FireWire(R) and Dcons support in man:loader[8] on i386 or amd64:" +msgstr "" +"Чтобы включить поддержку FireWire(R) и Dcons в man:loader[8] на i386 или " +"amd64:" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:710 +msgid "" +"Add `LOADER_FIREWIRE_SUPPORT=YES` in [.filename]#/etc/make.conf# and rebuild " +"man:loader[8]:" +msgstr "" +"Добавьте `LOADER_FIREWIRE_SUPPORT=YES` в [.filename]#/etc/make.conf# и " +"пересоберите man:loader[8]:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:714 +#, no-wrap +msgid "# cd /sys/boot/i386 && make clean && make && make install\n" +msgstr "# cd /sys/boot/i386 && make clean && make && make install\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:717 +msgid "" +"To enable man:dcons[4] as an active low-level console, add `boot_multicons=" +"\"YES\"` to [.filename]#/boot/loader.conf#." +msgstr "" +"Чтобы включить man:dcons[4] в качестве активной низкоуровневой консоли, " +"добавьте `boot_multicons=\"YES\"` в [.filename]#/boot/loader.conf#." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:720 +msgid "" +"Here are a few configuration examples. A sample kernel configuration file " +"would contain:" +msgstr "" +"Вот несколько примеров конфигурации. Образец файла конфигурации ядра может " +"содержать:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:729 +#, no-wrap +msgid "" +"device dcons\n" +"device dcons_crom\n" +"options KDB\n" +"options DDB\n" +"options GDB\n" +"options ALT_BREAK_TO_DEBUGGER\n" +msgstr "" +"device dcons\n" +"device dcons_crom\n" +"options KDB\n" +"options DDB\n" +"options GDB\n" +"options ALT_BREAK_TO_DEBUGGER\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:732 +msgid "And a sample [.filename]#/boot/loader.conf# would contain:" +msgstr "И образец [.filename]#/boot/loader.conf# может содержать:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:740 +#, no-wrap +msgid "" +"dcons_crom_load=\"YES\"\n" +"dcons_gdb=1\n" +"boot_multicons=\"YES\"\n" +"hw.firewire.phydma_enable=1\n" +"hw.firewire.dcons_crom.force_console=1\n" +msgstr "" +"dcons_crom_load=\"YES\"\n" +"dcons_gdb=1\n" +"boot_multicons=\"YES\"\n" +"hw.firewire.phydma_enable=1\n" +"hw.firewire.dcons_crom.force_console=1\n" + +#. type: Title ==== +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:742 +#, no-wrap +msgid "Enabling FireWire(R) and Dcons support on the host machine" +msgstr "Включение поддержки FireWire(R) и Dcons на главной машине" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:745 +msgid "To enable FireWire(R) support in the kernel on the _host machine_:" +msgstr "Чтобы включить поддержку FireWire(R) в ядре на _основной машине_:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:749 +#, no-wrap +msgid "# kldload firewire\n" +msgstr "# kldload firewire\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:752 +msgid "" +"Find out the EUI64 (the unique 64 bit identifier) of the FireWire(R) host " +"controller, and use man:fwcontrol[8] or `dmesg` to find the EUI64 of the " +"target machine." +msgstr "" +"Определите EUI64 (уникальный 64-битный идентификатор) контроллера " +"FireWire(R) и используйте man:fwcontrol[8] или `dmesg`, чтобы найти EUI64 " +"целевой машины." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:754 +msgid "Run man:dconschat[8], with:" +msgstr "Запустите man:dconschat[8], с:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:758 +#, no-wrap +msgid "# dconschat -e \\# -br -G 12345 -t 00-11-22-33-44-55-66-77\n" +msgstr "# dconschat -e \\# -br -G 12345 -t 00-11-22-33-44-55-66-77\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:761 +msgid "" +"The following key combinations can be used once man:dconschat[8] is running:" +msgstr "" +"Следующие комбинации клавиш могут быть использованы после запуска man:" +"dconschat[8]:" + +#. type: Table +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:767 +#, no-wrap +msgid "kbd:[~+.]" +msgstr "kbd:[~+.]" + +#. type: Table +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:769 +#, no-wrap +msgid "Disconnect" +msgstr "Отсоединиться" + +#. type: Table +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:770 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:773 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:776 +#, no-wrap +msgid "kbd:[~]" +msgstr "kbd:[~]" + +#. type: Table +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:772 +#, no-wrap +msgid "ALT BREAK" +msgstr "ALT BREAK" + +#. type: Table +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:775 +#, no-wrap +msgid "RESET target" +msgstr "ПЕРЕЗАГРУЗИТЬ (RESET) целевую машину" + +#. type: Table +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:777 +#, no-wrap +msgid "Suspend dconschat" +msgstr "Приостановить dconschat" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:780 +msgid "" +"Attach remote GDB by starting man:kgdb[1] with a remote debugging session:" +msgstr "" +"Присоедините удаленный GDB, запустив man:kgdb[1] с сеансом удаленной отладки:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:784 +#, no-wrap +msgid " kgdb -r :12345 kernel\n" +msgstr " kgdb -r :12345 kernel\n" + +#. type: Title ==== +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:786 +#, no-wrap +msgid "Some general tips" +msgstr "Некоторые общие рекомендации" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:789 +msgid "Here are some general tips:" +msgstr "Вот несколько общих советов:" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:791 +msgid "" +"To take full advantage of the speed of FireWire(R), disable other slow " +"console drivers:" +msgstr "" +"Чтобы в полной мере использовать скорость FireWire(R), отключите другие " +"медленные драйверы консоли:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:796 +#, no-wrap +msgid "" +"# conscontrol delete ttyd0\t # serial console\n" +"# conscontrol delete consolectl\t# video/keyboard\n" +msgstr "" +"# conscontrol delete ttyd0\t # serial console\n" +"# conscontrol delete consolectl\t# video/keyboard\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:799 +msgid "" +"There exists a GDB mode for man:emacs[1]; this is what you will need to add " +"to your [.filename]#.emacs#:" +msgstr "" +"Существует режим GDB для man:emacs[1]; вот что нужно добавить в ваш [." +"filename]#.emacs#:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:806 +#, no-wrap +msgid "" +"(setq gud-gdba-command-name \"kgdb -a -a -a -r :12345\")\n" +"(setq gdb-many-windows t)\n" +"(xterm-mouse-mode 1)\n" +"M-x gdba\n" +msgstr "" +"(setq gud-gdba-command-name \"kgdb -a -a -a -r :12345\")\n" +"(setq gdb-many-windows t)\n" +"(xterm-mouse-mode 1)\n" +"M-x gdba\n" + +#. type: Title === +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:808 +#, no-wrap +msgid "Dcons with KVM" +msgstr "Dcons с KVM" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:812 +msgid "" +"We can directly read the man:dcons[4] buffer via [.filename]#/dev/mem# for " +"live systems, and in the core dump for crashed systems. These give you " +"similar output to `dmesg -a`, but the man:dcons[4] buffer includes more " +"information." +msgstr "" +"Мы можем напрямую читать буфер man:dcons[4] через [.filename]#/dev/mem# для " +"работающих систем и в дампе памяти для систем после аварии. Это даёт " +"аналогичный вывод команде `dmesg -a`, но буфер man:dcons[4] содержит больше " +"информации." + +#. type: Title ==== +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:813 +#, no-wrap +msgid "Using Dcons with KVM" +msgstr "Использование Dcons с KVM" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:816 +msgid "To use man:dcons[4] with KVM:" +msgstr "Для использования man:dcons[4] с KVM:" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:818 +msgid "Dump a man:dcons[4] buffer of a live system:" +msgstr "Дамп буфера man:dcons[4] работающей системы:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:822 +#, no-wrap +msgid "# dconschat -1\n" +msgstr "# dconschat -1\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:825 +msgid "Dump a man:dcons[4] buffer of a crash dump:" +msgstr "Дамп буфера man:dcons[4] аварийного дампа:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:829 +#, no-wrap +msgid "# dconschat -1 -M vmcore.XX\n" +msgstr "# dconschat -1 -M vmcore.XX\n" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:832 +msgid "Live core debugging can be done via:" +msgstr "Отладка ядра в реальном времени может быть выполнена через:" + +#. type: delimited block . 4 +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:837 +#, no-wrap +msgid "" +"# fwcontrol -m target_eui64\n" +"# kgdb kernel /dev/fwmem0.2\n" +msgstr "" +"# fwcontrol -m target_eui64\n" +"# kgdb kernel /dev/fwmem0.2\n" + +#. type: Title == +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:840 +#, no-wrap +msgid "Glossary of Kernel Options for Debugging" +msgstr "Глоссарий параметров ядра для отладки" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:843 +msgid "" +"This section provides a brief glossary of compile-time kernel options used " +"for debugging:" +msgstr "" +"В этом разделе представлен краткий глоссарий параметров ядра, указываемых " +"при компиляции и относящихся к отладке:" + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:845 +msgid "" +"`options KDB`: compiles in the kernel debugger framework. Required for " +"`options DDB` and `options GDB`. Little or no performance overhead. By " +"default, the debugger will be entered on panic instead of an automatic " +"reboot." +msgstr "" +"`options KDB`: включает фреймворк отладки ядра. Необходим для `options DDB` " +"и `options GDB`. Практически не влияет на производительность. По умолчанию " +"отладчик будет запущен при панике вместо автоматической перезагрузки." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:846 +msgid "" +"`options KDB_UNATTENDED`: change the default value of the `debug." +"debugger_on_panic` sysctl to 0, which controls whether the debugger is " +"entered on panic. When `options KDB` is not compiled into the kernel, the " +"behavior is to automatically reboot on panic; when it is compiled into the " +"kernel, the default behavior is to drop into the debugger unless `options " +"KDB_UNATTENDED` is compiled in. If you want to leave the kernel debugger " +"compiled into the kernel but want the system to come back up unless you're " +"on-hand to use the debugger for diagnostics, use this option." +msgstr "" +"`options KDB_UNATTENDED`: изменяет значение по умолчанию системной настройки " +"`debug.debugger_on_panic` на 0, что управляет входом в отладчик при панике. " +"Если `options KDB` не вкомпилировано в ядро, поведение по умолчанию — " +"автоматическая перезагрузка при панике; если оно вкомпилировано в ядро, " +"поведение по умолчанию — переход в отладчик, если не вкомпилирована опция " +"`options KDB_UNATTENDED`. Если вы хотите оставить отладчик ядра " +"вкомпилированным в ядро, но желаете, чтобы система перезагружалась, пока вы " +"не готовы использовать отладчик для диагностики, используйте эту опцию." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:847 +msgid "" +"`options KDB_TRACE`: change the default value of the `debug.trace_on_panic` " +"sysctl to 1, which controls whether the debugger automatically prints a " +"stack trace on panic. Especially if running with `options KDB_UNATTENDED`, " +"this can be helpful to gather basic debugging information on the serial or " +"firewire console while still rebooting to recover." +msgstr "" +"`options KDB_TRACE`: изменяет значение по умолчанию системной настройки " +"`debug.trace_on_panic` на 1, что управляет автоматическим выводом " +"трассировки стека при панике. Особенно полезно при использовании с `options " +"KDB_UNATTENDED`, так как позволяет собрать базовую отладочную информацию на " +"последовательной консоли или консоли FireWire, продолжая перезагрузку для " +"восстановления." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:848 +msgid "" +"`options DDB`: compile in support for the console debugger, DDB. This " +"interactive debugger runs on whatever the active low-level console of the " +"system is, which includes the video console, serial console, or firewire " +"console. It provides basic integrated debugging facilities, such as stack " +"tracing, process and thread listing, dumping of lock state, VM state, file " +"system state, and kernel memory management. DDB does not require software " +"running on a second machine or being able to generate a core dump or full " +"debugging kernel symbols, and provides detailed diagnostics of the kernel at " +"run-time. Many bugs can be fully diagnosed using only DDB output. This " +"option depends on `options KDB`." +msgstr "" +"`options DDB`: включает поддержку консольного отладчика DDB. Этот " +"интерактивный отладчик работает на активной низкоуровневой консоли системы, " +"включая видеоконсоль, последовательную консоль или консоль FireWire. Он " +"предоставляет базовые встроенные средства отладки, такие как трассировка " +"стека, список процессов и потоков, вывод состояния блокировок, состояния " +"виртуальной памяти, состояния файловой системы и управления ядром памяти. " +"DDB не требует работы программного обеспечения на второй машине или " +"возможности создания дампа памяти или полных символов отладки ядра, а также " +"предоставляет детальную диагностику ядра во время выполнения. Многие ошибки " +"могут быть полностью диагностированы с использованием только вывода DDB. Эта " +"опция зависит от `options KDB`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:849 +msgid "" +"`options GDB`: compile in support for the remote debugger, GDB, which can " +"operate over serial cable or firewire. When the debugger is entered, GDB may " +"be attached to inspect structure contents, generate stack traces, etc. Some " +"kernel state is more awkward to access than in DDB, which is able to " +"generate useful summaries of kernel state automatically, such as " +"automatically walking lock debugging or kernel memory management structures, " +"and a second machine running the debugger is required. On the other hand, " +"GDB combines information from the kernel source and full debugging symbols, " +"and is aware of full data structure definitions, local variables, and is " +"scriptable. This option is not required to run GDB on a kernel core dump. " +"This option depends on `options KDB`." +msgstr "" +"`options GDB`: включает поддержку удалённого отладчика GDB, который может " +"работать через последовательный кабель или FireWire. При входе в отладчик " +"можно подключить GDB для проверки содержимого структур, генерации " +"трассировки стека и т.д. Некоторые состояния ядра сложнее исследовать, чем в " +"DDB, который способен автоматически создавать полезные сводки состояния " +"ядра, например, автоматически обходить структуры отладки блокировок или " +"управления памятью ядра, но для этого требуется вторая машина с запущенным " +"отладчиком. С другой стороны, GDB объединяет информацию из исходного кода " +"ядра и полных отладочных символов, знает полные определения структур данных, " +"локальные переменные и поддерживает написание скриптов. Эта опция не " +"требуется для запуска GDB на дампе памяти ядра. Данная опция зависит от " +"`options KDB`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:850 +msgid "" +"`options BREAK_TO_DEBUGGER`, `options ALT_BREAK_TO_DEBUGGER`: allow a break " +"signal or alternative signal on the console to enter the debugger. If the " +"system hangs without a panic, this is a useful way to reach the debugger. " +"Due to the current kernel locking, a break signal generated on a serial " +"console is significantly more reliable at getting into the debugger, and is " +"generally recommended. This option has little or no performance impact." +msgstr "" +"`options BREAK_TO_DEBUGGER`, `options ALT_BREAK_TO_DEBUGGER`: позволяют " +"сигналу прерывания или альтернативному сигналу на консоли войти в отладчик. " +"Если система зависает без паники, это полезный способ попасть в отладчик. Из-" +"за текущей блокировки ядра сигнал прерывания, сгенерированный на " +"последовательной консоли, значительно надёжнее для входа в отладчик и обычно " +"рекомендуется. Данная опция оказывает незначительное или нулевое влияние на " +"производительность." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:851 +msgid "" +"`options INVARIANTS`: compile into the kernel a large number of run-time " +"assertion checks and tests, which constantly test the integrity of kernel " +"data structures and the invariants of kernel algorithms. These tests can be " +"expensive, so are not compiled in by default, but help provide useful \"fail " +"stop\" behavior, in which certain classes of undesired behavior enter the " +"debugger before kernel data corruption occurs, making them easier to debug. " +"Tests include memory scrubbing and use-after-free testing, which is one of " +"the more significant sources of overhead. This option depends on `options " +"INVARIANT_SUPPORT`." +msgstr "" +"`options INVARIANTS`: включает в ядро большое количество проверок и тестов " +"во время выполнения, которые постоянно проверяют целостность структур данных " +"ядра и инварианты алгоритмов ядра. Эти тесты могут быть затратными, поэтому " +"по умолчанию не включены, но они помогают обеспечить полезное поведение " +"\"fail stop\", при котором определённые классы нежелательного поведения " +"попадают в отладчик до возникновения повреждения данных ядра, что упрощает " +"их отладку. Тесты включают в себя очистку памяти и проверку использования " +"после освобождения, что является одним из наиболее значимых источников " +"накладных расходов. Эта опция зависит от `options INVARIANT_SUPPORT`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:852 +msgid "" +"`options INVARIANT_SUPPORT`: many of the tests present in `options " +"INVARIANTS` require modified data structures or additional kernel symbols to " +"be defined." +msgstr "" +"`options INVARIANT_SUPPORT`: многие тесты, присутствующие в `options " +"INVARIANTS`, требуют модифицированных структур данных или определения " +"дополнительных символов ядра." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:853 +msgid "" +"`options WITNESS`: this option enables run-time lock order tracking and " +"verification, and is an invaluable tool for deadlock diagnosis. WITNESS " +"maintains a graph of acquired lock orders by lock type, and checks the graph " +"at each acquire for cycles (implicit or explicit). If a cycle is detected, a " +"warning and stack trace are generated to the console, indicating that a " +"potential deadlock might have occurred. WITNESS is required in order to use " +"the `show locks`, `show witness` and `show alllocks` DDB commands. This " +"debug option has significant performance overhead, which may be somewhat " +"mitigated through the use of `options WITNESS_SKIPSPIN`. Detailed " +"documentation may be found in man:witness[4]." +msgstr "" +"`options WITNESS`: эта опция включает отслеживание и проверку порядка " +"блокировок во время выполнения, что является неоценимым инструментом для " +"диагностики взаимоблокировок. WITNESS поддерживает граф полученных порядков " +"блокировок по типам блокировок и проверяет граф на каждом получении на " +"наличие циклов (явных или неявных). Если цикл обнаружен, на консоль " +"выводится предупреждение и трассировка стека, указывающие на возможное " +"возникновение взаимоблокировки. WITNESS необходим для использования команд " +"DDB `show locks`, `show witness` и `show alllocks`. Эта отладочная опция " +"создает значительную нагрузку на производительность, которую можно несколько " +"уменьшить с помощью `options WITNESS_SKIPSPIN`. Подробная документация " +"доступна в man:witness[4]." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:854 +msgid "" +"`options WITNESS_SKIPSPIN`: disable run-time checking of spinlock lock order " +"with WITNESS. As spin locks are acquired most frequently in the scheduler, " +"and scheduler events occur often, this option can significantly speed up " +"systems running with WITNESS. This option depends on `options WITNESS`." +msgstr "" +"`options WITNESS_SKIPSPIN`: отключает проверку порядка блокировки spinlock " +"во время выполнения с WITNESS. Поскольку spin-блокировки чаще всего " +"захватываются в планировщике, а события планировщика происходят часто, эта " +"опция может значительно ускорить системы, работающие с WITNESS. Эта опция " +"зависит от `options WITNESS`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:855 +msgid "" +"`options WITNESS_KDB`: change the default value of the `debug.witness.kdb` " +"sysctl to 1, which causes WITNESS to enter the debugger when a lock order " +"violation is detected, rather than simply printing a warning. This option " +"depends on `options WITNESS`." +msgstr "" +"`options WITNESS_KDB`: изменяет значение по умолчанию системной настройки " +"`debug.witness.kdb` на 1, что приводит к входу в отладчик при обнаружении " +"нарушения порядка блокировок вместо простого вывода предупреждения. Эта " +"опция зависит от `options WITNESS`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:856 +msgid "" +"`options SOCKBUF_DEBUG`: perform extensive run-time consistency checking on " +"socket buffers, which can be useful for debugging both socket bugs and race " +"conditions in protocols and device drivers that interact with sockets. This " +"option significantly impacts network performance, and may change the timing " +"in device driver races." +msgstr "" +"`options SOCKBUF_DEBUG`: выполнять расширенную проверку согласованности " +"сокетных буферов во время выполнения, что может быть полезно для отладки как " +"ошибок в сокетах, так и состояний гонки в протоколах и драйверах устройств, " +"взаимодействующих с сокетами. Данная опция значительно влияет на " +"производительность сети и может изменить временные параметры в состояниях " +"гонки драйверов устройств." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:857 +msgid "" +"`options DEBUG_VFS_LOCKS`: track lock acquisition points for lockmgr/vnode " +"locks, expanding the amount of information displayed by `show lockedvnods` " +"in DDB. This option has a measurable performance impact." +msgstr "" +"`options DEBUG_VFS_LOCKS`: отслеживает точки получения блокировок для " +"lockmgr/vnode, расширяя объем информации, отображаемой командой `show " +"lockedvnods` в DDB. Данная опция оказывает заметное влияние на " +"производительность." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:858 +msgid "" +"`options DEBUG_MEMGUARD`: a replacement for the man:malloc[9] kernel memory " +"allocator that uses the VM system to detect reads or writes from allocated " +"memory after free. Details may be found in man:memguard[9]. This option has " +"a significant performance impact, but can be very helpful in debugging " +"kernel memory corruption bugs." +msgstr "" +"`options DEBUG_MEMGUARD`: замена для man:malloc[9], аллокатор памяти ядра, " +"который использует систему VM для обнаружения чтения или записи в " +"освобождённую память. Подробности можно найти в man:memguard[9]. Данная " +"опция значительно влияет на производительность, но может быть очень полезна " +"при отладке ошибок повреждения памяти ядра." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:859 +msgid "" +"`options DIAGNOSTIC`: enable additional, more expensive diagnostic tests " +"along the lines of `options INVARIANTS`." +msgstr "" +"`options DIAGNOSTIC`: включает дополнительные, более затратные " +"диагностические тесты, аналогичные `options INVARIANTS`." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:860 +msgid "" +"`options KASAN`: enable the Kernel Address Sanitizer. This enables compiler " +"instrumentation which can be used to detect invalid memory accesses in the " +"kernel, such as use-after-frees and buffer overflows. This largely " +"supersedes `options DEBUG_MEMGUARD`. See man:kasan[9] for details, and for " +"the currently supported platforms." +msgstr "" +"`options KASAN`: включает отладчик адресов ядра (Kernel Address Sanitizer). " +"Это включает инструментирование компилятора, которое может использоваться " +"для обнаружения недопустимых обращений к памяти в ядре, таких как " +"использование после освобождения и переполнение буфера. В значительной " +"степени заменяет `options DEBUG_MEMGUARD`. Подробности и список " +"поддерживаемых платформ см. в man:kasan[9]." + +#. type: Plain text +#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:860 +msgid "" +"`options KMSAN`: enable the Kernel Memory Sanitizer. This enables compiler " +"instrumentation which can be used to detect uses of uninitialized memory. " +"See man:kmsan[9] for details, and for the currently supported platforms." +msgstr "" +"`options KMSAN`: включить отладчик использования памяти ядра (Kernel Memory " +"Sanitizer). Это включает инструментирование компилятора, которое может " +"использоваться для обнаружения использования неинициализированной памяти. " +"Подробности и список поддерживаемых платформ см. в man:kmsan[9]." + +#~ msgid "And for DDD ([.filename]#devel/ddd#):" +#~ msgstr "И для DDD ([.filename]#devel/ddd#):" + +#, no-wrap +#~ msgid "" +#~ "# remote serial protocol\n" +#~ "LANG=C ddd --debugger kgdb -r :12345 kernel\n" +#~ "# live core debug\n" +#~ "LANG=C ddd --debugger kgdb kernel /dev/fwmem0.2\n" +#~ msgstr "" +#~ "# remote serial protocol\n" +#~ "LANG=C ddd --debugger kgdb -r :12345 kernel\n" +#~ "# live core debug\n" +#~ "LANG=C ddd --debugger kgdb kernel /dev/fwmem0.2\n" |
