# Диагностика (/ru/docs/wa/diagnostics)

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

Несколько слов, которые используются на этой странице:

* **run** – это один вызов `wa` от начала до выхода.
* **Запись о выполнении** — это папка, в которой хранится то, что было выполнено при каждом запуске: его команда, его результат и одна строка для каждой операции. Он никогда не содержит текст сообщений, имена или заголовки чатов.
* **`wa personal doctor`** проверяет установку: версию, профиль, настройки, локальное хранилище и собственные части WhatsApp — движок, ключи устройства и блокировку.
  – **Отчет о проблеме** — это один файл JSON, созданный на основе `wa personal doctor`, и неудачный запуск. Вы прикрепляете его к проблеме.

## Что можно сделать [#что-можно-сделать]

| Задача | Команда | Сохраняет что-нибудь? |
| --- | --- | --- |
| Смотрите каждую операцию, как она происходит | `wa --trace …` | нет, печатает только в stderr |
| Смотрите весь провал | `wa --debug …` | нет, печатает только в stderr |
| Ведите учет одного запуска | `wa --record …` | да, рекорд запуска |
| Найти неудачный запуск позже | `wa personal runs list` | неудачный запуск сохраняется сам по себе |
| Ведите учет каждого запуска | `wa personal config set record true` | да, каждый запуск |
| Проверьте установку | `wa personal doctor`, `wa personal doctor --online` | нет |
| Сообщить о проблеме | `wa personal doctor reports create` | да, один файл вы отправите |

## Покажите это: `--trace` и `--debug` [#покажите-это---trace-и---debug]

```sh
wa personal --trace messages send 100000000000001@lid "test"
wa personal --debug chats mark-read 100000000000001@lid
```

`--trace` печатает каждую операцию на stderr по мере ее возникновения: что было запрошено, что вернулось, с идентификаторами, счетчиками, длительностью и кодом ошибки, если таковой был. stdout не меняется, поэтому канал по-прежнему получает только данные. Даже в этом случае собственный журнал движка остается отключенным: в нем указаны идентификаторы WhatsApp, а идентификатор номера телефона — это номер телефона.

`--debug` заменяет однострочную ошибку всей записью об ошибке — ее причиной и стеком — в stderr.

## Сохраните: `--record` [#сохраните---record]

```sh
wa personal --record chats list
wa personal runs list              # recorded runs, newest first
wa personal runs show 20261001T080000Z-process-000001     # one run: its outcome, and one line per operation
wa personal runs path 20261001T080000Z-process-000001     # the folder that holds it
```

Идентификатор запуска, указанный выше, составлен; `runs list`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-runs-list "Справочник команды: wa runs list") показывает настоящие.

Запись запуска — это папка под `runs/<day>/` в папке состояния. Его имя – время и команда. Он содержит два файла:

* `run.json` — команда, профиль, версия `wa`, узел и система, когда она началась и закончилась, результат и код ошибки;
* `events.jsonl` — те же операции, что и `--trace`, по одной в строке.

## Неудачный запуск всегда сохраняется [#неудачный-запуск-всегда-сохраняется]

Если команда завершается ошибкой, ее выполнение сохраняется даже без `--record`. `run.json` тогда имеет `"keptBecauseFailed": true`. Это касается каждой команды и каждой ошибки: плохой вариант, неизвестная команда, проверка перед любой работой, отказ, потому что другая команда удерживает устройство. Запись содержит только слова команды, такие как `messages send`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-messages-send "Справочник команды: wa messages send"), а не то, что за ними следует.

Успешный запуск не оставляет записей, если вы их не запросите, поэтому отчет о проблеме всегда не прикрепляется. `--no-record` или `"record": false` в настройках это тоже отключает.

Успешные поиски сохраняют свою собственную историю, помимо записей о запусках: см. [поиск](/llms.mdx/docs/ru/wa/search/content.md).

## Когда записывать каждый запуск [#когда-записывать-каждый-запуск]

```sh
wa personal config set record true          # this profile
wa personal --no-record chats list          # but not this one
```

По умолчанию успешный запуск не записывается, пока вы не спросите. Инструмент обмена сообщениями, в котором хранится папка с информацией о том, кого и когда вы читаете, и дневник вашей жизни, о котором никто не просил.

## Как долго он живет [#как-долго-он-живет]

**30 дней** или `keep_runs_for_days` в настройках. Старые запуски удаляются только тогда, когда новый сохраняется целый день по имени папки, поэтому для принятия решения ничего открывать не нужно.

## Чего никогда нет в записи [#чего-никогда-нет-в-записи]

Запись о выполнении и `--trace` содержат имя операции, идентификаторы, количество, продолжительность и коды ошибок. Они никогда не несут:

* текст сообщения;
* заголовок чата или имя человека;
* **то, что вы набрали как `<chat>`**, потому что набранный чат часто является именем;
* номер телефона, код сопряжения или ключи устройства.

То же самое относится и к отчету, составленному по результатам запуска.

## Проверьте установку: `wa doctor` [#проверьте-установку-wa-doctor]

```sh
wa personal doctor            # connects to nothing
wa personal doctor --online   # also connects once and reads the account; sends nothing
```

Помимо версии, среды выполнения, профиля, файла конфигурации и локального хранилища, `doctor`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-doctor "Справочник команды: wa doctor") считывает с диска три вещи WhatsApp, ничего не запуская:- **`engine`** — есть ли программа движка для запуска и путь к ней. Когда он отсутствует, подсказка говорит, что делать: переустановить `wa` с включенными дополнительными пакетами, установить `WA_ENGINE` или при проверке исходного кода запустить `pnpm engine:build`.

* **`device`** — существуют ли ключи устройства, и могут ли `private.db`, его файлы `-wal` и `-shm` или их папка быть прочитаны другими пользователями этой машины. К каждому такому файлу прилагается команда `chmod`, которая его исправляет. `doctor`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-doctor "Справочник команды: wa doctor") никогда не открывает ключи и никогда не меняет режим файла сам. В Windows проверка Unix-прав доступа к файлам не выполняется.
* **`lock`** — кто последним удерживал одно соединение устройства (`serve (pid 4242)`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve")), и выполняется ли этот процесс. Движок никогда не очищает имя, поэтому держатель считается запущенным только до тех пор, пока работает его процесс.

`--online` подключается один раз. Во время работы `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") вместо этого используется соединение `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") ([одно соединение на устройство](/llms.mdx/docs/ru/wa/sessions/content.md#one-connection-per-device)).

## Отчет о проблеме [#отчет-о-проблеме]

```sh
wa personal doctor reports create              # about the newest failed run
wa personal doctor reports create --run 20261001T080000Z-process-000001   # a made-up run id
```

Он записывает файл JSON — то, что показывает `wa personal doctor` плюс запуск — и говорит, куда его отправить: новая проблема на [github.com/WireCatLabs/whatsapp-cli/issues](https://github.com/WireCatLabs/whatsapp-cli/issues/new). Прочтите его, прежде чем отправить. Он не содержит текста сообщения. Только `wa doctor reports show`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-doctor-reports-show "Справочник команды: wa doctor reports show") показывает, что будет содержать отчет, и ничего не пишет.

Если неудачных запусков не сохранилось, запустите неудачную команду еще раз; его неудача сохраняется сама собой.

## Что делать с запусками [#что-делать-с-запусками]

Записи имеют формат JSON, поэтому `jq` отвечает на вопросы о них. `wa personal runs list --json` отвечает на `{ items, page, meta }`, а `items` — это `run.json` серий, сначала самые новые:

```sh
wa personal runs list --limit 100 --json | jq '[.items[] | select(.status == "failed") | {command, error_code}]'
wa personal runs list --limit 100 --json | jq '[.items[] | .duration_ms] | add / length'
```

## Ошибки поиска и частичные запуски [#ошибки-поиска-и-частичные-запуски]

```sh
wa personal search runs error_code:authentication_error --json
wa personal search runs status:partial 'started_at>=2026-10-01' --json
```

`search runs`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-search-runs "Справочник команды: wa search runs") ищет буквальный диагностический текст в записях. Условия запроса, например `operation:messages.download`, `profile:work`, `error_code:timeout`, `status:failed`, а также сравнения и диапазоны `started_at:`, сужают поиск вместе с `--limit` и `--page`; каждая страница вмещает до 100 запусков. Команда читает только записи и никогда не подключается.

## Далее [#далее]

* [Что означает ошибка и что делать](/llms.mdx/docs/ru/wa/troubleshooting/content.md)
* [Что вообще доходит до диска](/llms.mdx/docs/ru/wa/security/content.md)
