Ви натискаєте 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 із назвою за часом початку й зупинки, підсумок із двох рядків про невдалий етап і нотатку про оточення з початку цього списку. Якщо частину не можна опублікувати публічно, скористайтеся приватним каналом підтримки постачальника і скажіть, який файл потребує цього каналу.

Перед надсиланням перевірте чотири речі. Чи охоплює пакет одну спробу, а не цілий день? Чи перетинаються часові позначки клієнта й системи? І чи залишилися в ньому токен, пароль або повний ідентифікатор абонента? Спершу виправте останній пункт, а потім додайте файли до наявного звернення, а не відкривайте нове, щоб той, хто його візьме, зберіг попередній контекст.

Схожі статті