Вы нажимаете Connect, профиль крутится секунду, и клиент сообщает о разрыве. Поддержка просит журналы, вы прикладываете скриншот, и обсуждение замирает на два дня, потому что никто не может сказать, какая часть рукопожатия сдалась. Отчёт, построенный вокруг одной попытки, с узким временным окном и последним завершённым этапом, продвигает обращение за один круг. Альтернатива, журналы за целый день, обычно даёт человеку на другой стороне больше мест, где искать.

Два телефона на одном шлюзе могут вести себя по-разному, потому что протокол, хранилище сертификатов, метод аутентификации или политика трафика могут не совпадать. Работает на моём телефоне это отправная точка для сравнения, а не доказательство сбоя Android.

Зафиксируйте одну попытку вместо целого дня истории

Запишите окружение до того, как что-либо воспроизводить: версию Android, производителя и модель, имя и версию клиента, выбранный профиль, сеть, к которой вы подключены, и время часов с его часовым поясом. Я также отмечаю, включены ли экономия батареи или Data Saver, потому что оба меняют то, что клиент может делать после выключения экрана.

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

Переходы тоже важны. Если сбой появляется только после блокировки экрана или после переключения с Wi-Fi на мобильные данные, напишите это в первой строке обращения и отметьте минуту, когда это произошло.

Сначала экспортируйте собственный журнал клиента

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

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

Добавляйте logcat только для вопроса, который можете назвать

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

Поддерживаемый путь это авторизованная сессия ADB с компьютера, который вы контролируете. Включите параметры разработчика и отладку по USB, подключите кабель и примите диалог отпечатка RSA на устройстве; если этот запрос закрыть, каждая следующая команда завершится ошибкой unauthorized, и запись не начнётся.

Убедитесь, что устройство действительно на месте, прежде чем тратить время на запись. adb devices должен вывести серийный номер, а затем слово device, и всё, что показывает offline или unauthorized, сначала требует привести в порядок кабель, запрос или драйвер.

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

adb logcat -v threadtime -b main,system,crash > attempt.txt

Фильтруйте по времени и тегу, а не по слову VPN

Поиск vpn в записи это самый быстрый способ потерять строку, которая объясняет сбой. Проверка сертификатов, падения процессов и изменения подключения записываются под тегами, которые никогда не упоминают VPN, поэтому фильтр по ключевому слову оставляет шум и выбрасывает доказательства.

Сначала сузьте окно, затем приоритет, затем тег. Когда нужен только тот отрезок, который произошёл после известного момента, adb logcat -v threadtime -t '11-03 20:14:00.000' воспроизводит недавний хвост с этой точки, а формат threadtime сохраняет метки времени сопоставимыми с собственным экспортом клиента.

Если вы знаете пакет клиента, следите за его процессом, а не угадывайте теги. adb shell pidof com.vendor.client возвращает PID, а adb logcat --pid=1234 -v threadtime печатает только этот процесс, тогда как adb logcat -g показывает, сколько места у каждого буфера до начала перезаписи.

Скройте секреты, а затем передайте один связный пакет

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

Затем отправьте один пакет вместо нескольких отдельных файлов: экспорт клиента, окно ADB с названием по времени начала и остановки, сводку из двух строк о сбойном этапе и заметку об окружении из начала этого списка. Если часть нельзя опубликовать публично, используйте закрытый канал поддержки провайдера и скажите, какой файл требует этого канала.

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

Похожие статьи