> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Eseguire il debug end-to-end di una segnalazione di bug

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="Eseguire il debug di un bug report end-to-end" description="Fornisci a Devin un bug report con log Datadog e accesso al database e ottieni un'analisi della causa principale e una PR con la correzione." prompt="Usa l'MCP di Datadog per trovare l'errore più frequente in produzione nelle ultime 24 ore. Recupera lo stack trace completo e i log correlati, interroga la replica in sola lettura del database per tutti i dati rilevanti, rintraccia la causa principale nel codebase e apri una PR con una correzione e un test di regressione." category="Gestione degli incidenti" features="MCP" />

<div className="uc-detail-wrapper">
  <Tip>Per una guida più dettagliata sull'integrazione con Datadog, [clicca qui](/it/enterprise/integrations/datadog).</Tip>

  <Steps>
    <Step title="Collega Datadog">
      Devin ha bisogno di accedere ai log di Datadog per cercare errori relativi al bug. Se non l'hai già fatto, abilita il Datadog MCP:

      1. Vai su **Settings > Connections > server MCP** e trova **Datadog**
      2. Fai clic su **Enable**, seleziona il tuo sito/regione Datadog e fornisci due header:
         * `DD-API-KEY` — dalla tua [pagina Datadog API keys](https://app.datadoghq.com/organization-settings/api-keys)
         * `DD-APPLICATION-KEY` — dalla tua [pagina Datadog application keys](https://app.datadoghq.com/organization-settings/application-keys)

      Una volta connesso, Devin può cercare nei log, recuperare tracce di errore e correlare i problemi con i deploy — tutto all'interno della sessione. Consulta [MCP Marketplace](/it/integrations/overview) per tutti i dettagli sulla configurazione.
    </Step>

    <Step title="Concedi a Devin l’accesso in sola lettura al database">
      Per i bug sui dati — valori errati, campi mancanti, query non funzionanti — Devin è molto più efficace quando può verificare direttamente lo stato dei dati. Fornisci una stringa di connessione di sola lettura come [Secret](/it/product-guides/secrets):

      1. Vai su **Settings > Secrets** e aggiungi un nuovo secret:
         * **Name**: `DATABASE_READ_REPLICA_URL`
         * **Value**: `postgresql://readonly_user:password@read-replica.internal:5432/production`
      2. Aggiungi una nota come: *"Connessione di sola lettura alla read replica di produzione. Da usare solo per query SELECT."*

      In alternativa, collega un database MCP (PostgreSQL, MySQL, ecc.) in **Settings > Connections > server MCP** — Devin può usare entrambi gli approcci per interrogare i tuoi dati.

      <Tip>Usa sempre una read replica o un utente con permessi di sola SELECT. Devin non ha mai bisogno di accesso in scrittura per analizzare un bug. Se sei preoccupato che query costose possano incidere sulle prestazioni, configura Devin perché utilizzi una read replica dedicata o una replica analitica esistente separata dal tuo database di produzione.</Tip>
    </Step>

    <Step title="Invia a Devin il bug report">
      Incolla il bug report direttamente in una sessione di Devin. Includi tutto il contesto fornito da chi l'ha segnalato — quando è iniziato, chi è interessato, cosa non funziona e dove. Per un'indagine strutturata, usa il [`!triage` template playbook](https://app.devin.ai/settings/playbooks/14fed18b89d44713a26e673cf258f548?utm_source=docs\&utm_medium=use-case-gallery) — duplicalo e personalizza i passaggi per il tuo stack.

      <PromptBlock>
        ```txt Debug billing page bug theme={null}
        Bug report dal team di supporto: gli utenti del piano Pro vedono "undefined" invece
        del nome della loro azienda nella pagina di fatturazione. Questo è iniziato dopo il deploy
        di venerdì scorso (intorno al 2026-02-13 18:00 UTC).

        Passaggi per l'analisi:
        1. Usa Datadog per estrarre i log di errore del servizio di fatturazione da venerdì —
           cerca errori di riferimento nullo o modifiche nelle risposte delle API
        2. Interroga la read replica per verificare se gli utenti del piano Pro hanno effettivamente un
           valore company_name: SELECT id, company_name, plan FROM users WHERE plan = 'pro' LIMIT 20
        3. Controlla il git log per il deploy di venerdì — cosa è cambiato nella pagina di fatturazione
           o nella risposta dell'API utente?
        4. Identifica la causa principale e risolvila
        5. Aggiungi un test di regressione che intercetterebbe questo problema se si ripresentasse
        6. Esegui l'app in locale e verifica che la pagina di fatturazione venga visualizzata correttamente
           usando il browser
        7. Apri una PR con la correzione
        ```
      </PromptBlock>

      Più il bug report è specifico, più velocemente Devin trova la risposta. "Dal deploy di venerdì" permette a Devin di restringere la finestra temporale in Datadog. "Utenti del piano Pro" gli indica esattamente quali record interrogare.
    </Step>

    <Step title="Devin indaga e risolve">
      Con Datadog e l’accesso al database configurati, Devin esegue un’indagine completa:

      **Estrae i log di Datadog** — Cerca errori sul servizio di fatturazione a partire da venerdì, filtrando per nome del servizio e stato di errore. Trova un picco di `TypeError: Cannot read property 'name' of undefined` a partire dalle 18:12 UTC nella data del deploy.

      **Interroga il database** — Esegue `SELECT id, company_name, plan FROM users WHERE plan = 'pro' LIMIT 20` sulla replica in sola lettura. Conferma che gli utenti Pro *hanno* valori `company_name` — i dati sono corretti, quindi il bug è nel codice.

      **Rintraccia la modifica al codice** — Controlla `git log --since="2026-02-13"` e trova il commit `a1b2c3d` che ha eseguito un refactoring della risposta dell’API utente, rinominando `company` in `organization`. La pagina di fatturazione in `src/pages/billing/BillingHeader.tsx` fa ancora riferimento a `user.company.name`.

      **Scrive la correzione** — Aggiorna `BillingHeader.tsx` per usare `user.organization?.name ?? 'Your Company'` e aggiunge un test di regressione che renderizza il componente sia con la vecchia sia con la nuova struttura della risposta dell’API.

      **Verifica nel browser** — Avvia il server di sviluppo, apre la pagina di fatturazione nel browser integrato di Devin e conferma che il nome dell’azienda ora viene visualizzato correttamente per un utente di test.

      **Apre una PR** con la correzione, il test e una descrizione che spiega la causa principale e l’impatto (tutti gli utenti Pro ed Enterprise, \~350 account).
    </Step>

    <Step title="Passaggi successivi">
      Una volta che la PR di correzione è stata unita (merged), puoi chiedere a Devin di cercare problemi correlati o di aggiungere monitoraggio:

      <PromptBlock>
        ```txt Find other references to the old field theme={null}
        The root cause was user.company being renamed to user.organization in the
        API response. Search the entire frontend for other references to
        "user.company" and update them all.
        ```
      </PromptBlock>

      Se vuoi che Devin ricordi qualcosa emerso da questa indagine per la prossima volta, diglielo semplicemente — ad esempio, *"Ricorda che l'API utente usa `user.organization`, non `user.company`."* Devin proporrà una voce di [Knowledge](/it/product-guides/knowledge) che puoi rivedere e salvare. In questo modo, le sessioni future inizieranno già con il contesto che il tuo team ha acquisito.
    </Step>
  </Steps>
</div>
