aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/books/developers-handbook/kerneldebug/_index.po')
-rw-r--r--documentation/content/ru/books/developers-handbook/kerneldebug/_index.po2242
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"