正在檢查瀏覽器支援…
用線看手機的即時 log,一邊流一邊篩,再把你找到的東西存下來。
log 是透過 USB 線讀取,只留在這個分頁裡。什麼都不會上傳,匯出是由瀏覽器直接寫進你自己的磁碟。
正在檢查瀏覽器支援…
把 Android 手機用 USB 接到 Chromium 瀏覽器,這頁就會串流它的 log:和桌面 adb 印出來一模一樣的 logcat -v threadtime,可以在行進來的時候用等級、tag 或正規表示式篩選,也能暫停、清空,並把緩衝區裡的全部內容匯出。手機上什麼都不用裝,什麼都不會上傳——這是一頁沒有後端的靜態頁面,透過線和 adbd 對話,關掉分頁串流就結束。
一行 threadtime 長這樣:07-26 13:37:01.234 1234 1250 I ActivityManager: Start proc,每一欄都有用。日期時間是訊息寫下那一刻手機的時鐘,精確到毫秒,這才能用秒錶的方式比較兩行的間隔。1234 是程序 id,1250 是**執行緒** id;這一組就是你分辨「主執行緒卡住」和「背景工作」的依據,也是這個格式值得多佔一點寬度的理由。I 是等級,ActivityManager 是寫的人自己取的 tag(慣例上是類別或子系統名稱),冒號後面全部都是訊息。檢視器保留原始行、不重新排版,所以你從這裡複製走的東西,貼進 bug 回報時就是手機寫的樣子。
log 比你以為的少,通常是它運作正常,而原因值得知道。等級:這裡從 verbose 往上都顯示,但 release 版在編譯期就把大部分 Log.v 和 Log.d 拿掉了,那些行根本沒被寫出來。隱私:從 Android 4.1 起,一個 app 只能讀**自己**的 log,而以前能讀更多的 READ_LOGS 是 signature 等級。這頁能全部給你看不是因為找到什麼偏門手法,而是因為 shell 這個使用者本來就有這個權限。速率限制:logd 會丟掉某個一直灌 log 的程序的訊息,並印一行 chatty 說丟了幾行——那是在手機上就真的掉了,不是在這裡。緩衝區:預設看的是 main、system、crash,radio 和 events 是 logcat -b 才選得到的另外幾個環狀緩衝區,這頁不讀。還有,這裡的篩選是套用在**進來的行**上,所以把條件放寬不會把已經過去的行叫回來;要那樣就清空再重新開始。
中間沒有任何重新實作。桌面的 adb logcat 是開一條到 adbd 的串流,把回來的東西印出來;這頁是用 WebUSB 開同一條串流,把回來的東西印出來。把一行拆成欄位好給等級與 tag 篩選用的那段是我們自己寫的(一個小 parser,附上用真機錄下來的輸出做的測試),但位元組是手機自己的,認不出來的行會原樣顯示而不是被吞掉。瀏覽器做不到的是需要 socket 的那部分:透過 TCP 連遠端裝置的 adb logcat 在網頁裡不可能,因為網頁沒有原生 socket。只有 USB,支援矩陣也是這樣寫的。
忙起來的手機一分鐘寫幾萬行;如果承諾全部留著,就是承諾一路長大到把分頁弄死——而且剛好死在這功能存在的目的、也就是長時間擷取的途中。所以緩衝區是最新十萬行的滾動視窗,並且會數它丟掉的行:面板上會寫現在保留幾行、總共收到幾行、丟掉幾行,所以匯出的東西不會默默比它宣稱的少。終端機自己的捲動紀錄另有上限,而匯出是取自緩衝區而不是畫面——xterm 會把長行照視窗寬度折斷,而存下來的 log 應該帶著手機的換行,不是你視窗的換行。
這是檢視器,不是除錯器:它不能附加到程序、不能下中斷點,也不能讓一個 app 印出它本來就沒寫的 log。它真正擅長的是通常最先要做的那件事——在一台你從來沒裝過 platform-tools 的機器上,一邊重現問題一邊看手機在說什麼。從這裡可以去螢幕頁,一邊做一邊鏡像或錄影;系統監測頁看當時 CPU 和溫度在做什麼;Web ADB 首頁有其餘工具,還有一個在任何頁面都能打開同一個檢視器的 ⌘K 抽屜。
把那個 app 的 tag 的一部分打進 tag 欄位——比對不分大小寫、而且是部分符合,所以 `Activity` 會抓到 `ActivityManager` 和 `ActivityThread`。如果那個 app 的 tag 沒什麼規律,就用正規表示式欄位,它是對整行原始文字比對,所以訊息裡出現的套件名稱也會被抓到。用程序 id 篩是桌面比較直接的一件事(`adb logcat --pid=`),這裡對應的做法是看你在意的那一行的 PID 欄,再把它填進正規表示式欄位。
有三種不同的機制。release 版在出貨前就把大部分 verbose 和 debug 呼叫刪掉了,所以那些行不存在、也讀不到。`logd` 會對一直灌 log 的程序做速率限制,並用一行 `chatty` 說它丟了幾行——那個損失發生在手機上,不是這裡。還有這個檢視器自己的視窗只保留最新十萬行,丟掉舊行的時候會在終端機正上方寫丟了幾行,所以你匯出的東西不會默默不完整。
可以。匯出按鈕會把緩衝區的內容照手機自己的換行寫成一個普通的 `.txt`,走瀏覽器平常的下載路徑。它匯出的是緩衝區而不是看得到的捲動紀錄,因為終端機會把長行照你的視窗寬度折斷,而且留的行數更少。如果匯出之前已經丟過行,終端機上方的計數會寫丟了幾行,所以這個檔案的極限是看得見的,不是暗示的。
不用。這頁自己就會用 WebUSB 講 ADB 協定,沒有東西要安裝、沒有 PATH 要設、也沒有 server 要啟動。要知道的反而是相反的問題:桌面已經在跑的 `adb` server 會獨佔 USB 介面,這頁要等到你執行 `adb kill-server` 或把線拔掉重插才拿得到。真的遇到時,連線卡會這樣告訴你。
裝置儀表板、shell 抽屜,以及其他所有 Web ADB 工具。
用同一條線即時鏡像螢幕,或錄成 MP4。
CPU、記憶體、溫度與程序清單,每秒更新。