mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
189 lines
83 KiB
HTML
189 lines
83 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head><meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Debugging & Profiling - agent-device</title>
|
|
<script>{;const saved = localStorage.getItem('rspress-theme-appearance');const preferDark = window.matchMedia('(prefers-color-scheme: dark)').matches;const isDark = !saved || saved === 'auto' ? preferDark : saved === 'dark';document.documentElement.classList.toggle('dark', isDark);document.documentElement.classList.toggle('rp-dark', isDark);document.documentElement.style.colorScheme = isDark ? 'dark' : 'light';}</script>
|
|
<link href="/agent-device/static/css/styles.cf5e9ab9a4.css" rel="stylesheet">
|
|
<script defer src="/agent-device/static/js/styles.308ea4bafe.js"></script>
|
|
<script defer src="/agent-device/static/js/lib-react.e84adf13b9.js"></script>
|
|
<script defer src="/agent-device/static/js/lib-router.270f17bfa6.js"></script>
|
|
<script defer src="/agent-device/static/js/476.52ed165336.js"></script>
|
|
<script defer src="/agent-device/static/js/index.8722046b0d.js"></script>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="generator" content="Rspress v2.0.12">
|
|
<meta property="og:url" content="https://oss.callstack.com/agent-device">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:title" content="Debugging & Profiling - agent-device">
|
|
<meta property="og:image" content="https://oss.callstack.com/agent-device/og-image.jpg">
|
|
<meta property="og:description" content="Use agent-device when the task moves past UI automation and you need runtime evidence from the app or device layer.">
|
|
<link rel="icon" href="/agent-device/logo.svg" type="image/svg+xml">
|
|
<meta name="description" content="Use agent-device when the task moves past UI automation and you need runtime evidence from the app or device layer."></head>
|
|
|
|
<body>
|
|
<div id="__rspress_root"><link rel="preload" as="image" href="/agent-device/logo-light.svg"/><link rel="preload" as="image" href="/agent-device/logo-dark.svg"/><link rel="preload" as="image" href="/agent-device/static/image/abstract-atom.4eca0300ff.avif"/><header class="rp-nav"><div class="rp-nav__left"><div class="rp-nav__title"><a href="/agent-device/" class="rp-nav__title__link rp-link"><div class="rp-nav__title__logo"><img src="/agent-device/logo-light.svg" alt="logo" id="logo" class="rspress-logo rp-nav__title__logo-image rp-nav__title__logo-image--light"/><img src="/agent-device/logo-dark.svg" alt="logo" id="logo" class="rspress-logo rp-nav__title__logo-image rp-nav__title__logo-image--dark"/></div></a></div></div><div class="rp-nav__right"><button class="rp-search-button"><div class="rp-search-button__content"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16" class="rp-search-button__icon"><path fill="#838289" d="M14.667 14.666h-1.333v-1.333h1.332zm-1.333-1.333H12V12h1.333zm-4-1.333H4v-1.334h5.334zM12 12h-1.335v-1.334h1.335zm-8-1.334H2.665V9.333H4zm6.665 0H9.334V9.333h1.332zm-8-1.333H1.335V4h1.333zm9.335 0h-1.335V4h1.335zM4 4H2.665V2.666H4zm6.665 0H9.334V2.666h1.332zM9.334 2.666H4V1.333h5.334z"></path></svg><span class="rp-search-button__word">Search</span></div><div class="rp-search-button__hotkey" style="opacity:0"><span></span><span>K</span></div></button><div class="rp-search-button--mobile"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="#838289" d="M14.667 14.666h-1.333v-1.333h1.332zm-1.333-1.333H12V12h1.333zm-4-1.333H4v-1.334h5.334zM12 12h-1.335v-1.334h1.335zm-8-1.334H2.665V9.333H4zm6.665 0H9.334V9.333h1.332zm-8-1.333H1.335V4h1.333zm9.335 0h-1.335V4h1.335zM4 4H2.665V2.666H4zm6.665 0H9.334V2.666h1.332zM9.334 2.666H4V1.333h5.334z"></path></svg></div><ul class="rp-nav-menu rp-nav-menu--right"><li class="rp-nav-menu__item"><a href="/agent-device/docs/introduction" class="rp-nav-menu__item__container rp-link">Docs</a></li></ul><div class="rp-nav__others"><div class="rp-nav-menu__divider"></div><div role="button" tabindex="0" class="rspress-nav-appearance"><div class="rp-p-1 rp-border rp-border-solid rp-border-gray-300 rp-text-gray-400 rp-cursor-pointer rp-rounded-md rp-transition-all rp-duration-300 rp-w-7 rp-h-7"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 24 24"><path fill="currentColor" d="M18 22H8v-2h10zM8 20H6v-2h2zm12 0h-2v-2h2zM6 18H4v-2h2zm16 0h-2v-4h-2v-2h2v-2h2zM4 16H2V6h2zm14 0h-6v-2h6zm-6-2h-2v-2h2zm-2-2H8V6h2zM6 6H4V4h2zm8-2h-2v2h-2V4H6V2h8z"></path></svg></div></div><div class="rp-social-links"><a href="https://github.com/callstack/agent-device" target="_blank" rel="noopener noreferrer" class="rp-social-links__item"><div class="rp-social-links__icon"><div class="rp-social-links__icon"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></div></div></a><a href="https://discord.gg/eYapw6F3" target="_blank" rel="noopener noreferrer" class="rp-social-links__item"><div class="rp-social-links__icon"><div class="rp-social-links__icon"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24"><path fill="currentColor" d="M20.317 4.37a19.8 19.8 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.3 18.3 0 0 0-5.487 0a13 13 0 0 0-.617-1.25a.08.08 0 0 0-.079-.037A19.7 19.7 0 0 0 3.677 4.37a.1.1 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.08.08 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.08.08 0 0 0 .084-.028a14 14 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13 13 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10 10 0 0 0 .372-.292a.07.07 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.07.07 0 0 1 .078.01q.181.149.373.292a.077.077 0 0 1-.006.127a12.3 12.3 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.08.08 0 0 0 .084.028a19.8 19.8 0 0 0 6.002-3.03a.08.08 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.06.06 0 0 0-.031-.03M8.02 15.33c-1.182 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418m7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418"/></svg></div></div></a><ul class="rp-hover-group rp-hover-group--hidden rp-hover-group--right"></ul></div></div><button aria-label="mobile hamburger" class="rp-nav-hamburger rp-nav-hamburger__sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#838289" fill-rule="evenodd" d="M1 9h6v6H1zm2 2v2h2v-2zm6-2h6v6H9zm2 2v2h2v-2zm6-2h6v6h-6zm2 2v2h2v-2z" clip-rule="evenodd"></path></svg></button><button aria-label="mobile hamburger" class="rp-nav-hamburger rp-nav-hamburger__md"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#838289" fill-rule="evenodd" d="M1 9h6v6H1zm2 2v2h2v-2zm6-2h6v6H9zm2 2v2h2v-2zm6-2h6v6h-6zm2 2v2h2v-2z" clip-rule="evenodd"></path></svg><ul class="rp-hover-group rp-hover-group--hidden rp-hover-group--right"><div class="rp-nav-menu__others-mobile__container"><div class="rp-nav-hamburger__md__hover-group"><div class="rp-nav-screen-appearance"><div class="rp-nav-screen-appearance__left">Theme</div><div class="rp-nav-screen-appearance__right"></div></div><div class="rp-nav-screen-divider"></div><div class="rp-social-links"><a href="https://github.com/callstack/agent-device" target="_blank" rel="noopener noreferrer" class="rp-social-links__item"><div class="rp-social-links__icon"><div class="rp-social-links__icon"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></div></div></a><a href="https://discord.gg/eYapw6F3" target="_blank" rel="noopener noreferrer" class="rp-social-links__item"><div class="rp-social-links__icon"><div class="rp-social-links__icon"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24"><path fill="currentColor" d="M20.317 4.37a19.8 19.8 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.3 18.3 0 0 0-5.487 0a13 13 0 0 0-.617-1.25a.08.08 0 0 0-.079-.037A19.7 19.7 0 0 0 3.677 4.37a.1.1 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.08.08 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.08.08 0 0 0 .084-.028a14 14 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13 13 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10 10 0 0 0 .372-.292a.07.07 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.07.07 0 0 1 .078.01q.181.149.373.292a.077.077 0 0 1-.006.127a12.3 12.3 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.08.08 0 0 0 .084.028a19.8 19.8 0 0 0 6.002-3.03a.08.08 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.06.06 0 0 0-.031-.03M8.02 15.33c-1.182 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418m7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418"/></svg></div></div></a><ul class="rp-hover-group rp-hover-group--hidden rp-hover-group--right"></ul></div></div></div></ul></button></div></header><div class="rp-doc-layout__menu"><div class="rp-sidebar-menu"><button type="button" class="rp-sidebar-menu__left"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#838289" d="M20 18H4v-2h16zm0-5H4v-2h16zm0-5H4V6h16z"></path></svg><span>Menu</span></button><button type="button" class="rp-sidebar-menu__right"><span class="rp-sidebar-menu__right__text">Contents</span><svg width="14" height="14" class="rp-progress-circle"><circle cx="7" cy="7" r="6" stroke-linecap="round" fill="none" stroke="var(--rp-c-divider-light)" stroke-width="2"></circle><circle cx="7" cy="7" r="6" stroke-linecap="round" fill="none" stroke="var(--rp-c-brand)" stroke-width="2" stroke-dasharray="37.69911184307752" stroke-dashoffset="37.69911184307752" transform="rotate(-90 7 7)" style="transition:stroke-dashoffset 0.3s"></circle></svg><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" fill="none" viewBox="0 0 12 13" class="rp-sidebar-menu__right__icon" style="transform:rotate(0deg);transition:transform 0.2s ease-out"><path fill="#BCBBC2" d="M6.5 4.5h1v-1h-1v-1h-1v1h-1v1h1v6h1zm-2 0h-1v1h1zm4 0h-1v1h1zm-5 2v-1h-1v1zm6-1h-1v1h1z"></path></svg></button></div></div><div class="rp-doc-layout__container"><aside class="rp-doc-layout__sidebar rp-scrollbar"><div class="rp-sidebar-item rp-sidebar-group" style="padding-left:12px" data-depth="0"><div class="rp-sidebar-item__left"><span class="rp-doc">Getting Started</span></div><div class="rp-sidebar-item__right"></div></div><div style="display:grid;grid-template-rows:1fr;transition:grid-template-rows 0.2s ease-out"><div style="overflow:hidden"><a href="/agent-device/docs/introduction" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Introduction</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/installation" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Installation</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/agent-setup" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">AI Agent Setup</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/quick-start" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Quick Start</span></div><div class="rp-sidebar-item__right"></div></a></div></div><div class="rp-sidebar-item rp-sidebar-group" style="padding-left:12px" data-depth="0"><div class="rp-sidebar-item__left"><span class="rp-doc">Using agent-device</span></div><div class="rp-sidebar-item__right"></div></div><div style="display:grid;grid-template-rows:1fr;transition:grid-template-rows 0.2s ease-out"><div style="overflow:hidden"><a href="/agent-device/docs/commands" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Commands</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/configuration" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Configuration</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/selectors" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Selectors</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/sessions" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Sessions</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/batching" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Batching</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/snapshots" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Snapshots</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/replay-e2e" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Replay & E2E testing</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/debugging-profiling" class="rp-sidebar-item rp-sidebar-item--active rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Debugging & Profiling</span></div><div class="rp-sidebar-item__right"></div></a></div></div><div class="rp-sidebar-item rp-sidebar-group" style="padding-left:12px" data-depth="0"><div class="rp-sidebar-item__left"><span class="rp-doc">Integrations</span></div><div class="rp-sidebar-item__right"></div></div><div style="display:grid;grid-template-rows:1fr;transition:grid-template-rows 0.2s ease-out"><div style="overflow:hidden"><a href="/agent-device/docs/client-api" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Node.js API</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/ai-sdk" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">AI SDK</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/eve" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Eve</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/remote-proxy" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Remote Proxy</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/device-clouds" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Device Clouds</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/browserstack" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">BrowserStack</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/aws-device-farm" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">AWS Device Farm</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/limrun" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Limrun</span></div><div class="rp-sidebar-item__right"></div></a></div></div><div class="rp-sidebar-item rp-sidebar-group" style="padding-left:12px" data-depth="0"><div class="rp-sidebar-item__left"><span class="rp-doc">Reference</span></div><div class="rp-sidebar-item__right"></div></div><div style="display:grid;grid-template-rows:1fr;transition:grid-template-rows 0.2s ease-out"><div style="overflow:hidden"><a href="/agent-device/docs/security-trust" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Security & Trust</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/known-limitations" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Known Limitations</span></div><div class="rp-sidebar-item__right"></div></a><a href="/agent-device/docs/migrating-gestures" class="rp-sidebar-item rp-sidebar-item--group-item rp-link" style="padding-left:calc(12px * 1 + 12px)" data-depth="1"><div class="rp-sidebar-item__left"><span class="rp-doc">Migrating Gestures</span></div><div class="rp-sidebar-item__right"></div></a></div></div></aside><div class="rp-doc-layout__doc"><main class="rp-doc-layout__doc-container"><div class="rp-doc rspress-doc"><!--$--><h1 class="rp-toc-include" id="debugging--profiling"><a href="#debugging--profiling" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Debugging & Profiling<!-- --> </h1><div class="rp-not-doc rp-llms-container"><button class="rp-not-doc rp-llms-button rp-llms-copy-button"><div class="rp-llms-copy-button__icon-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-llms-copy-button__icon-success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-llms-copy-button__icon-copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg></div><span>Copy Markdown</span></button><button class="rp-llms-button rp-llms-view-options__trigger "><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" class="rp-llms-view-options__arrow "><path fill="currentColor" d="M6.5 8.5h1v1h-1v1h-1v-1h-1v-1h1v-6h1zm-2 0h-1v-1h1zm4 0h-1v-1h1zm-5-2v1h-1v-1zm6 1h-1v-1h1z"></path></svg></button></div>
|
|
<p>Use <code>agent-device</code> when the task moves past UI automation and you need runtime evidence from the app or device layer.</p>
|
|
<h2 class="rp-toc-include" id="what-agent-device-covers-well"><a href="#what-agent-device-covers-well" class="rp-header-anchor rp-link" aria-hidden="true">#</a>What <code>agent-device</code> covers well</h2>
|
|
<ul>
|
|
<li>Session app logs for targeted debugging windows</li>
|
|
<li>Network inspection from recent HTTP(s) entries in app logs via <code>network dump</code></li>
|
|
<li>Audio-level probes for browser media elements and host-rendered simulator/emulator audio</li>
|
|
<li>Focused performance evidence with <code>perf frames</code>, <code>perf memory</code>, and native profile reports</li>
|
|
<li>Apple crash symbolication with <code>debug symbols</code></li>
|
|
<li>Screenshots, recordings, and replayable repro flows</li>
|
|
</ul>
|
|
<h2 class="rp-toc-include" id="react-native-component-internals"><a href="#react-native-component-internals" class="rp-header-anchor rp-link" aria-hidden="true">#</a>React Native component internals</h2>
|
|
<p>If the task needs the React Native component tree, props, state, hooks, or render profiling, use the <code>react-devtools</code> passthrough:</p>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> status</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> wait</span><span style="color:var(--shiki-token-string)"> --connected</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> get</span><span style="color:var(--shiki-token-string)"> tree</span><span style="color:var(--shiki-token-string)"> --depth</span><span style="color:var(--shiki-token-constant)"> 3</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> get</span><span style="color:var(--shiki-token-string)"> component</span><span style="color:var(--shiki-token-string)"> @c5</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> start</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> stop</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> slow</span><span style="color:var(--shiki-token-string)"> --limit</span><span style="color:var(--shiki-token-constant)"> 5</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> rerenders</span><span style="color:var(--shiki-token-string)"> --limit</span><span style="color:var(--shiki-token-constant)"> 5</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> timeline</span><span style="color:var(--shiki-token-string)"> --limit</span><span style="color:var(--shiki-token-constant)"> 20</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> react-devtools</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> report</span><span style="color:var(--shiki-token-string)"> @c5</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<p><code>agent-device</code> remains centered on the device and app runtime layer. The <code>react-devtools</code> command dynamically runs pinned <code>agent-react-devtools</code> commands for React internals.</p>
|
|
<p>For React Native apps, overlays, Metro/Fast Refresh blockers, and routing to React DevTools or debugging evidence, start with <code>agent-device help react-native</code>. For slow-flow investigations, combine <code>help react-devtools</code> for the narrow React profile window with <code>help debugging</code> for log markers, network/audio evidence, traces, and perf samples. Make one bounded first-pass survey with the <code>profile stop</code> summary, bounded <code>slow</code> and <code>rerenders</code> tables, and <code>timeline</code> only when commit timing matters; then drill into a specific <code>@c</code> ref with <code>profile report</code> instead of repeatedly raising broad <code>profile slow</code> limits.</p>
|
|
<p>React Native warning/error overlays belong to the app run. Treat them as findings or blockers: capture them, check <code>react-devtools errors</code> when connected, run <code>agent-device react-native dismiss-overlay</code> when the overlay is unrelated, then re-snapshot and report the overlay.</p>
|
|
<p>Use <code>alert wait</code>, <code>alert accept</code>, and <code>alert dismiss</code> for Android runtime permission prompts, Android native alerts, and iOS platform/app-owned modal dialogs. Do not use <code>settings permission</code> to answer a dialog already on screen. Reserve <code>settings permission</code> for setup or resetting permission state before a flow.</p>
|
|
<h2 class="rp-toc-include" id="react-native-js-memory-through-cdp"><a href="#react-native-js-memory-through-cdp" class="rp-header-anchor rp-link" aria-hidden="true">#</a>React Native JS memory through CDP</h2>
|
|
<p>Use <code>cdp</code> when a React Native or Expo app exposes a Metro CDP target and the task needs JavaScript heap usage, heap snapshots, allocation hotspots, retained-object diffs, retaining paths, or a small runtime eval to confirm JS state.</p>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> cdp</span><span style="color:var(--shiki-token-string)"> target</span><span style="color:var(--shiki-token-string)"> list</span><span style="color:var(--shiki-token-string)"> --url</span><span style="color:var(--shiki-token-string)"> http://127.0.0.1:8081</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> cdp</span><span style="color:var(--shiki-token-string)"> target</span><span style="color:var(--shiki-token-string)"> select</span><span style="color:var(--shiki-token-keyword)"> <</span><span style="color:var(--shiki-token-string)">target-i</span><span style="color:var(--shiki-foreground)">d</span><span style="color:var(--shiki-token-keyword)">></span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> cdp</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> usage</span><span style="color:var(--shiki-token-string)"> sample</span><span style="color:var(--shiki-token-string)"> --label</span><span style="color:var(--shiki-token-string)"> baseline</span><span style="color:var(--shiki-token-string)"> --gc</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> cdp</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> snapshot</span><span style="color:var(--shiki-token-string)"> capture</span><span style="color:var(--shiki-token-string)"> --name</span><span style="color:var(--shiki-token-string)"> baseline</span><span style="color:var(--shiki-token-string)"> --gc</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> cdp</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> snapshot</span><span style="color:var(--shiki-token-string)"> diff</span><span style="color:var(--shiki-token-string)"> --base</span><span style="color:var(--shiki-token-string)"> ms_1</span><span style="color:var(--shiki-token-string)"> --compare</span><span style="color:var(--shiki-token-string)"> ms_2</span><span style="color:var(--shiki-token-string)"> --limit</span><span style="color:var(--shiki-token-constant)"> 10</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> cdp</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> snapshot</span><span style="color:var(--shiki-token-string)"> leak-triplet</span><span style="color:var(--shiki-token-string)"> --baseline</span><span style="color:var(--shiki-token-string)"> ms_1</span><span style="color:var(--shiki-token-string)"> --action</span><span style="color:var(--shiki-token-string)"> ms_2</span><span style="color:var(--shiki-token-string)"> --cleanup</span><span style="color:var(--shiki-token-string)"> ms_3</span><span style="color:var(--shiki-token-string)"> --limit</span><span style="color:var(--shiki-token-constant)"> 10</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> cdp</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> snapshot</span><span style="color:var(--shiki-token-string)"> retainers</span><span style="color:var(--shiki-token-string)"> --snapshot</span><span style="color:var(--shiki-token-string)"> ms_3</span><span style="color:var(--shiki-token-string)"> --id</span><span style="color:var(--shiki-token-keyword)"> <</span><span style="color:var(--shiki-token-string)">node-i</span><span style="color:var(--shiki-foreground)">d</span><span style="color:var(--shiki-token-keyword)">></span><span style="color:var(--shiki-token-string)"> --depth</span><span style="color:var(--shiki-token-constant)"> 8</span><span style="color:var(--shiki-token-string)"> --limit</span><span style="color:var(--shiki-token-constant)"> 10</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<ul>
|
|
<li><code>cdp</code> dynamically runs a pinned CDP helper through npm; the first run may download the pinned package, and later runs can reuse the npm cache.</li>
|
|
<li>Every argument after <code>cdp</code> is passed to the CDP helper. Put <code>agent-device</code> global flags before <code>cdp</code> when you need the outer CLI to consume them.</li>
|
|
<li>In remote bridge sessions, run <code>connect</code> first and omit <code>--url</code> for <code>target list</code> or <code>target select</code>; <code>agent-device</code> derives the Metro CDP URL from the prepared remote runtime.</li>
|
|
<li>Start with <code>memory usage sample --gc</code> for a quick JS heap growth signal. Use snapshot diff and <code>leak-triplet</code> for proof that objects stayed retained after cleanup.</li>
|
|
<li>Until <code>cdp</code> has a compact leak report command, synthesize one from <code>memory usage diff</code>, <code>memory snapshot diff</code>, <code>memory snapshot leak-triplet</code>, and <code>memory snapshot retainers</code>.</li>
|
|
<li>Keep raw heap snapshots and allocation exports as artifacts. Default answers should summarize heap deltas, top retained classes/shapes, leak-triplet rows that stayed high after cleanup, and shortest useful retaining paths.</li>
|
|
<li>React Native/Hermes supports only part of browser CDP. If a method is unsupported, keep the selected target and fall back to heap usage samples plus heap snapshots.</li>
|
|
<li>Avoid <code>cdp profile cpu</code>, <code>trace</code>, <code>network</code>, and <code>console</code> by default because <code>agent-device</code> already has <code>perf cpu</code>, <code>trace</code>, <code>network</code>, <code>logs</code>, and <code>react-devtools</code> guidance for those areas.</li>
|
|
<li>Use <code>perf memory sample</code> and <code>perf memory snapshot</code> for native/process memory. Use <code>cdp</code> only for JavaScript heap evidence.</li>
|
|
</ul>
|
|
<h2 class="rp-toc-include" id="fast-path"><a href="#fast-path" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Fast path</h2>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> open</span><span style="color:var(--shiki-token-string)"> MyApp</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> ios</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> clear</span><span style="color:var(--shiki-token-string)"> --restart</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> mark</span><span style="color:var(--shiki-token-string-expression)"> "before repro"</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> press</span><span style="color:var(--shiki-token-string-expression)"> 'id="submit"'</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> network</span><span style="color:var(--shiki-token-string)"> dump</span><span style="color:var(--shiki-token-constant)"> 25</span><span style="color:var(--shiki-token-string)"> --include</span><span style="color:var(--shiki-token-string)"> headers</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> frames</span><span style="color:var(--shiki-token-string)"> --json</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> sample</span><span style="color:var(--shiki-token-string)"> --json</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> path</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<p>Use this flow when you need a clean repro window with logs, recent network activity, and a quick metrics sample from the active app session.</p>
|
|
<p><code>open</code> prints <code>Session state: <path></code>. Inspect that directory for per-run artifacts: <code>requests/<request-id>.ndjson</code> contains daemon request diagnostics, <code>runner.log</code> contains Apple runner/<code>xcodebuild</code> output, and <code>app.log</code> contains app/device logs when log capture is active. The top-level daemon log is for daemon lifecycle/startup issues.</p>
|
|
<p>On iOS simulators, <code>logs</code> scope by bundle id and the resolved app executable. For launch-time stdout/stderr, capture the direct app launch console instead of starting raw <code>simctl</code> streams:</p>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> open</span><span style="color:var(--shiki-token-string)"> MyApp</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> ios</span><span style="color:var(--shiki-token-string)"> --relaunch</span><span style="color:var(--shiki-token-string)"> --launch-console</span><span style="color:var(--shiki-token-string)"> ./artifacts/app.console.log</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<p><code>--launch-console</code> is only for direct iOS simulator app launches, not URL opens.</p>
|
|
<h2 class="rp-toc-include" id="crash-symbolication"><a href="#crash-symbolication" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Crash symbolication</h2>
|
|
<p>Crash routing:</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="rp-table-scroll-container rp-scrollbar"><table><thead><tr><th>Need</th><th>Use</th></tr></thead><tbody><tr><td>Lead-up timeline before a failure</td><td><code>logs</code></td></tr><tr><td>Failing frame from <code>crash.ips</code>/<code>crash.log</code> plus matching dSYM/build directory</td><td><code>debug symbols</code></td></tr><tr><td>Live state, breakpoints, variables, memory, or stepping</td><td>Xcode/LLDB</td></tr></tbody></table></div>
|
|
<p>Use <code>debug symbols</code> when you already have an Apple crash artifact and local dSYMs and need the failing code path, not a full log dump:</p>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> debug</span><span style="color:var(--shiki-token-string)"> symbols</span><span style="color:var(--shiki-token-string)"> --artifact</span><span style="color:var(--shiki-token-string)"> crash.log</span><span style="color:var(--shiki-token-string)"> --dsym</span><span style="color:var(--shiki-token-string)"> MyApp.dSYM</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> crash-symbolicated.log</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> debug</span><span style="color:var(--shiki-token-string)"> symbols</span><span style="color:var(--shiki-token-string)"> --artifact</span><span style="color:var(--shiki-token-string)"> crash.ips</span><span style="color:var(--shiki-token-string)"> --search-path</span><span style="color:var(--shiki-token-string)"> ./build</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> crash-symbolicated.ips</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<p>The command supports Apple <code>.ips</code>, <code>.crash</code>, and log-style crash artifacts that contain Binary Images or IPS <code>usedImages</code>. It matches UUIDs from the crash artifact against <code>dwarfdump --uuid</code> output from <code>.dSYM</code> bundles, runs <code>atos</code>, writes a symbolicated artifact, and prints only the output path plus a compact crash report: app/thread, exception or termination, top symbolicated frames, and the first actionable frame finding. This is better than pasting raw crash logs because it keeps agent context small while preserving the full symbolicated artifact on disk.</p>
|
|
<p><code>debug</code> is intentionally narrow. Use <code>logs</code> for app logs, <code>network</code> for HTTP evidence, <code>perf</code> for performance samples, <code>record</code>/<code>trace</code> for media and traces, and <code>react-devtools</code> for React Native internals. Android Java/R8 <code>mapping.txt</code> and native <code>ndk-stack</code>/<code>addr2line</code> symbolication are deferred; capture Android crash evidence with <code>logs</code> and symbolicate externally for now.</p>
|
|
<h2 class="rp-toc-include" id="core-commands"><a href="#core-commands" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Core commands</h2>
|
|
<h3 class="rp-toc-include" id="logs"><a href="#logs" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Logs</h3>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> start</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> stop</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> clear</span><span style="color:var(--shiki-token-string)"> --restart</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> path</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> doctor</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> logs</span><span style="color:var(--shiki-token-string)"> mark</span><span style="color:var(--shiki-token-string-expression)"> "before submit"</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<ul>
|
|
<li>Logging is off by default; enable it only for focused debugging windows.</li>
|
|
<li>Prefer <code>logs clear --restart</code> for clean repro loops.</li>
|
|
<li>Use <code>logs path</code> and then grep the file instead of loading whole logs into agent context.</li>
|
|
</ul>
|
|
<h3 class="rp-toc-include" id="network-inspection"><a href="#network-inspection" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Network inspection</h3>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> network</span><span style="color:var(--shiki-token-string)"> dump</span><span style="color:var(--shiki-token-constant)"> 25</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> network</span><span style="color:var(--shiki-token-string)"> dump</span><span style="color:var(--shiki-token-constant)"> 25</span><span style="color:var(--shiki-token-string)"> --include</span><span style="color:var(--shiki-token-string)"> headers</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> network</span><span style="color:var(--shiki-token-string)"> dump</span><span style="color:var(--shiki-token-constant)"> 25</span><span style="color:var(--shiki-token-string)"> --include</span><span style="color:var(--shiki-token-string)"> all</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<ul>
|
|
<li><code>network dump</code> parses recent HTTP(s) entries from the session app log for app/device sessions and from managed <code>agent-browser</code> request history for web sessions.</li>
|
|
<li><code>network log</code> is an alias for <code>network dump</code>.</li>
|
|
<li>Parsed results depend on what the app emits into the platform log backend.</li>
|
|
<li>Web <code>network dump</code> includes request and response headers when requested, but the current <code>agent-browser network requests</code> backend does not expose request or response bodies.</li>
|
|
</ul>
|
|
<h3 class="rp-toc-include" id="audio-probes"><a href="#audio-probes" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Audio probes</h3>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> audio</span><span style="color:var(--shiki-token-string)"> probe</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-constant)"> 10</span><span style="color:var(--shiki-token-constant)"> 1000</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> web</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> audio</span><span style="color:var(--shiki-token-string)"> probe</span><span style="color:var(--shiki-token-string)"> status</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> web</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> audio</span><span style="color:var(--shiki-token-string)"> probe</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> web</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> audio</span><span style="color:var(--shiki-token-string)"> probe</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-constant)"> 10</span><span style="color:var(--shiki-token-constant)"> 1000</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> macos</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> audio</span><span style="color:var(--shiki-token-string)"> probe</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-constant)"> 10</span><span style="color:var(--shiki-token-constant)"> 1000</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> ios</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> audio</span><span style="color:var(--shiki-token-string)"> probe</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-constant)"> 10</span><span style="color:var(--shiki-token-constant)"> 1000</span><span style="color:var(--shiki-token-string)"> --platform</span><span style="color:var(--shiki-token-string)"> android</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<ul>
|
|
<li><code>audio probe start [durationSeconds] [bucketMs]</code> samples live audio while the session keeps running, then exposes compact <code>rmsDbfs</code> and <code>peakDbfs</code> buckets. The first timing positional is seconds; the second is milliseconds.</li>
|
|
<li>On web, the probe samples HTML media elements through Web Audio. URL-backed media may be routed through the probe <code>AudioContext</code> while observed.</li>
|
|
<li>On macOS hosts, the probe samples host system audio through ScreenCaptureKit for macOS sessions, iOS simulators, and Android emulators. It requires Screen Recording permission and is system-audio evidence, not app-instrumented audio. Physical iOS and Android devices are not supported.</li>
|
|
<li>Use <code>status</code> to poll partial buckets during a 10-20 second observation window, and <code>stop</code> to end the probe early.</li>
|
|
</ul>
|
|
<h3 class="rp-toc-include" id="performance-snapshots"><a href="#performance-snapshots" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Performance snapshots</h3>
|
|
<div class="rp-codeblock language-bash"><div class="rp-codeblock__content"><div class="rp-codeblock__content__scroll-container rp-scrollbar rp-scrollbar--always"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0" data-lang="bash"><code><span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> frames</span><span style="color:var(--shiki-token-string)"> --json</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> sample</span><span style="color:var(--shiki-token-string)"> --json</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> snapshot</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> android-hprof</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> app.hprof</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> memory</span><span style="color:var(--shiki-token-string)"> snapshot</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> memgraph</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> app.memgraph</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> cpu</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> xctrace</span><span style="color:var(--shiki-token-string)"> --template</span><span style="color:var(--shiki-token-string-expression)"> "Time Profiler"</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> app.trace</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> cpu</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> xctrace</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> app.trace</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> cpu</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> report</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> xctrace</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> app-profile.json</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> cpu</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> simpleperf</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> cpu.perf.data</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> cpu</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> simpleperf</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> cpu.perf.data</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> cpu</span><span style="color:var(--shiki-token-string)"> profile</span><span style="color:var(--shiki-token-string)"> report</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> simpleperf</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> cpu-report.json</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> trace</span><span style="color:var(--shiki-token-string)"> start</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> perfetto</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> app.perfetto-trace</span></span>
|
|
<span class="line"><span style="color:var(--shiki-token-function)">agent-device</span><span style="color:var(--shiki-token-string)"> perf</span><span style="color:var(--shiki-token-string)"> trace</span><span style="color:var(--shiki-token-string)"> stop</span><span style="color:var(--shiki-token-string)"> --kind</span><span style="color:var(--shiki-token-string)"> perfetto</span><span style="color:var(--shiki-token-string)"> --out</span><span style="color:var(--shiki-token-string)"> app.perfetto-trace</span></span></code></pre></div><div class="rp-code-button-group"><button class="rp-code-button-group__button rp-code-wrap-button" title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrapped"><path fill="currentColor" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="rp-code-button-group__icon rp-code-button-group__icon--wrap"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="rp-code-button-group__button rp-code-copy-button" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="272" height="272" viewBox="0 0 272 272" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--copy"><path fill="currentColor" fill-rule="evenodd" d="M45.883 23.368h123.823v22.514H68.396v146.336H45.883zm45.026 45.027H225.99v180.107H90.91zm22.514 22.513v135.08h90.053V90.908z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="271" height="271" viewBox="0 0 271 271" class="rp-code-button-group__icon rp-code-copy-button__icon rp-code-copy-button__icon--success"><path fill="currentColor" d="M112.687 203.223H90.174v-22.514h22.512v-22.514h22.512v22.514h-22.511zm-22.514-22.514H67.66v-22.514h22.513zm-22.514-22.514H45.146v-22.512H67.66zm90.054 0h-22.514v-22.512h22.514zm22.514-22.512h-22.514v-22.514h22.514zm22.513-22.514h-22.513V90.655h22.513zm22.514-22.514H202.74V68.143h22.514z"></path></svg></button></div></div></div>
|
|
<ul>
|
|
<li>Use an explicit <code>frames</code>, <code>memory</code>, <code>cpu</code>, or <code>trace</code> area so the result stays focused and interpretable. In 0.21, bare <code>perf</code>, <code>perf sample</code>, <code>perf metrics</code>, and <code>metrics</code> fail with exact replacement guidance.</li>
|
|
<li><code>perf frames</code> returns a focused frame/jank-health payload.</li>
|
|
<li><code>perf memory sample</code> returns a compact memory-only payload. Prefer it over raw <code>dumpsys</code>/<code>leaks</code> output for first-pass agent diagnosis because it keeps arrays bounded and reports top offenders compactly.</li>
|
|
<li>Example sample shape: <code>{"metrics":{"memory":{"available":true,"totalPssKb":562958,"totalRssKb":570304,"topConsumers":[{"name":"Dalvik Heap","pssKb":213456}]}}}</code>.</li>
|
|
<li><code>perf memory snapshot</code> escalates to file artifacts. Android supports Java HPROF capture for active app processes when the build/device allows heap dumping. iOS simulator and macOS app sessions support memgraph capture through host-visible process tooling; physical iOS device memgraph capture reports unavailable with a hint instead of pretending support.</li>
|
|
<li>For React Native JavaScript heap leaks, use <code>agent-device cdp</code> against the Metro CDP target instead of native/process memory samples; see the CDP section above.</li>
|
|
<li>Heap and memgraph artifacts are returned as paths plus compact metadata. Example default output: <code>Memory artifact (android-hprof): /tmp/app.hprof (42MB)</code>. They are not printed or embedded in JSON by default. heapprofd/native allocation tracing is deferred until Perfetto plumbing is available.</li>
|
|
<li><code>perf cpu profile ... --kind xctrace</code> collects an Apple native <code>.trace</code>; <code>report</code> aggregates every run, returns at most ten weighted top functions in JSON, and prints five. <code>perf trace ... --kind xctrace</code> keeps trace data as an artifact.</li>
|
|
<li>On iOS simulators and macOS, process sampling and captures target the resolved app executable. Other running copies with the same executable name are excluded, including copies installed on another simulator.</li>
|
|
<li>Android native profiling uses <code>perf cpu profile ... --kind simpleperf</code>; its report likewise returns at most ten top functions and prints five. Android native trace capture uses <code>perf trace ... --kind perfetto</code>. These commands require an active Android app session and return artifact paths/summaries instead of dumping profile or trace contents.</li>
|
|
<li>Use the compact native perf result as agent evidence. For example, a successful Perfetto stop may return <code>state: "stopped"</code>, <code>outPath: "/tmp/app.perfetto-trace"</code>, <code>sizeBytes: 5392410</code>, and <code>method: "adb-shell-perfetto"</code> while the 5.3 MB raw trace remains on disk as the artifact.</li>
|
|
<li>Memory and Android frame-health availability depend on platform and whether the active session is bound to an app/package. HarmonyOS reports process RSS through HDC; CPU profiling, frame sampling, and memory-snapshot artifacts remain unavailable on the public HDC surface.</li>
|
|
<li>App startup duration is returned by <code>open</code> as <code>startup</code>; use that result directly rather than the removed aggregate perf response.</li>
|
|
<li>On Android and supported Apple targets, use <code>metrics.fps.droppedFramePercent</code> for the health check and <code>metrics.fps.worstWindows</code> to line up jank clusters with logs, network activity, or recent actions.</li>
|
|
</ul>
|
|
<h2 class="rp-toc-include" id="where-to-go-deeper"><a href="#where-to-go-deeper" class="rp-header-anchor rp-link" aria-hidden="true">#</a>Where to go deeper</h2>
|
|
<ul>
|
|
<li>Full command reference: <a href="/agent-device/docs/commands" class="rp-link">Commands</a></li>
|
|
<li>Node.js observability APIs: <a href="/agent-device/docs/client-api" class="rp-link">Node.js API</a></li>
|
|
<li>Session behavior and lifecycle: <a href="/agent-device/docs/sessions" class="rp-link">Sessions</a></li>
|
|
</ul><!--/$--></div><div class="container-uhcWmO"><img class="logo-IwzwG8" src="/agent-device/static/image/abstract-atom.4eca0300ff.avif" alt="Abstract Logo" aria-hidden="true"/><div class="content-uJxcIj"><div class="headlineContainer-NHNT4y"><h1 class="headline-iCUUUl">Need React or React Native
|
|
expertise you can count on?</h1></div><div class="buttonContainer-wOj8Y6"><div class="dark"><a href="https://www.callstack.com/contact?utm_campaign=open_source&utm_source=agent-device&utm_medium=referral&utm_content=FOOTER_CTA" class="button-DogSnd brand-rT2ahT ">Let's talk<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16" class="button-icon-Okk0hT" aria-hidden="true" focusable="false"><path fill="currentColor" d="M9.333 13.333h1.334V12H9.333zm-6.666-2.666h8V12H12v-1.333h1.333V9.333H12V8h-1.333v1.333H4V2.667H2.667zM9.333 8h1.334V6.667H9.333z"></path></svg></a></div></div></div></div><footer class="rp-doc-footer"><div class="rp-doc-footer__edit"><a href="https://github.com/callstack/agent-device/edit/main/website/docs/debugging-profiling.md" target="_blank" rel="noopener noreferrer" class="rp-edit-link rp-link">Edit this page on GitHub</a></div><div class="rp-doc-footer__divider"></div><div class="container-aZLxg0"><a href="/agent-device/docs/replay-e2e" class="pagerLink-_WIlZJ rp-link"><span class="iconBox-AUO0Le"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 24 24" class="icon-WRLCnG"><path d="M4 20h2V4H4zm8-5v2h2v-2zm-2-4H8v2h2v2h2v-2h8v-2h-8V9h-2zm2-2h2V7h-2z"></path></svg></span><span class="textWrap-lmdyLc"><span class="desc-sp3vRh">Previous page</span><span class="title-hrit_i">Replay & E2E testing</span></span></a><a href="/agent-device/docs/client-api" class="pagerLink-_WIlZJ next-axkYXz rp-link"><span class="textWrap-lmdyLc"><span class="desc-sp3vRh">Next page</span><span class="title-hrit_i">Node.js API</span></span><span class="iconBox-AUO0Le"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 24 24" class="icon-WRLCnG"><path d="M20 20h-2V4h2zm-8-5v2h-2v-2zm2-4h2v2h-2v2h-2v-2H4v-2h8V9h2zm-2-2h-2V7h2z"></path></svg></span></a></div></footer></main></div><aside class="rp-doc-layout__outline rp-scrollbar"><div class="rp-outline"><div class="rp-outline__title">Contents<svg width="14" height="14" class="rp-progress-circle"><circle cx="7" cy="7" r="6" stroke-linecap="round" fill="none" stroke="var(--rp-c-divider-light)" stroke-width="2"></circle><circle cx="7" cy="7" r="6" stroke-linecap="round" fill="none" stroke="var(--rp-c-brand)" stroke-width="2" stroke-dasharray="37.69911184307752" stroke-dashoffset="37.69911184307752" transform="rotate(-90 7 7)" style="transition:stroke-dashoffset 0.3s"></circle></svg></div><nav class="rp-outline__toc rp-scrollbar"><a href="#what-agent-device-covers-well" class="rp-toc-item rp-link" title="What agent-device covers well" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">What <code>agent-device</code> covers well</span></a><a href="#react-native-component-internals" class="rp-toc-item rp-link" title="React Native component internals" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">React Native component internals</span></a><a href="#react-native-js-memory-through-cdp" class="rp-toc-item rp-link" title="React Native JS memory through CDP" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">React Native JS memory through CDP</span></a><a href="#fast-path" class="rp-toc-item rp-link" title="Fast path" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Fast path</span></a><a href="#crash-symbolication" class="rp-toc-item rp-link" title="Crash symbolication" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Crash symbolication</span></a><a href="#core-commands" class="rp-toc-item rp-link" title="Core commands" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Core commands</span></a><a href="#logs" class="rp-toc-item rp-link" title="Logs" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Logs</span></a><a href="#network-inspection" class="rp-toc-item rp-link" title="Network inspection" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Network inspection</span></a><a href="#audio-probes" class="rp-toc-item rp-link" title="Audio probes" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Audio probes</span></a><a href="#performance-snapshots" class="rp-toc-item rp-link" title="Performance snapshots" style="padding-left:12px" data-depth="1"><span class="rp-toc-item__text rp-doc">Performance snapshots</span></a><a href="#where-to-go-deeper" class="rp-toc-item rp-link" title="Where to go deeper" style="padding-left:0" data-depth="0"><span class="rp-toc-item__text rp-doc">Where to go deeper</span></a></nav><div class="rp-outline__divider"></div><div class="rp-outline__bottom"><a href="https://github.com/callstack/agent-device/edit/main/website/docs/debugging-profiling.md" target="_blank" rel="noopener noreferrer" class="rp-outline__action-row rp-edit-link rp-link"><svg width="16" height="16" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5z"></path></svg><span>Edit this page on GitHub</span></a></div></div><div class="container-LzbylO"><div><div class="headline-y75_LS">Curious about developing mobile apps with AI agents?</div><div class="description-muYVs3">We can help you take your agentic workflows to the next level and ship faster.</div></div><a href="https://www.callstack.com/contact?utm_campaign=open_source&utm_source=agent-device&utm_medium=referral&utm_content=OUTLINE_CTA" class="button-DogSnd brand-rT2ahT ">Book a call<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16" class="button-icon-Okk0hT" aria-hidden="true" focusable="false"><path fill="currentColor" d="M9.333 13.333h1.334V12H9.333zm-6.666-2.666h8V12H12v-1.333h1.333V9.333H12V8h-1.333v1.333H4V2.667H2.667zM9.333 8h1.334V6.667H9.333z"></path></svg></a></div></aside></div></div>
|
|
<div id="__rspress_modal_container"></div>
|
|
</body>
|
|
</html>
|