Nyhet

Copilot CLI indexerar hela C++-kodbasen – mät standardläget före nästa session

Whole codebase indexing bygger ett persistent symbolindex för C++ och är påslaget som standard när Microsofts språkserver är installerad och konfigurerad. Kör ett kontrollerat kallt och varmt prov innan du avgör om snabbare navigering väger upp den första körningens tid och minne.

Publicerad

En silverfärgad, trådlik mänsklig figur framför en mörk geometrisk struktur med gröna kodrader.
Ett helt kodindex gör fler samband synliga, men den första kartläggningens lokala resurskostnad behöver fortfarande mätas.
Kort sagt

Välj två kända symboler i ett representativt C++-repository: en med få referenser och en som korsar flera kataloger. Mät första sessionen från start till färdigt index, följ /lsp logs, notera högsta observerade minne och kontrollera definitioner och referenser. Stäng sessionen och upprepa samma frågor. Testa avstängt läge först därefter och ändra bara en variabel.

Vad som ändrades den 22 september

GitHub lanserade whole codebase indexing, WCI, för C++ i Copilot CLI den 22 september 2026. Indexet omfattar symboler i projektet även när filerna inte är öppna. Microsoft C++ Language Server använder projektets kompileringsinformation för att förstå typer, symboler, includes och relationer mellan filer och kan återanvända resultatet mellan frågor.

Det viktiga villkoret är lätt att missa: standardläget gäller när Microsoft C++ Language Server är installerad och konfigurerad. Microsofts tekniska genomgång anger också att WCI behöver en giltig compile_commands.json. Om den filen saknas eller beskriver fel byggvariant mäter du inte bara indexets egenskaper, utan även ett konfigurationsfel. Börja därför med den byggvariant teamet faktiskt utvecklar och verifiera att språkservern hittar kompileringsdatabasen.

GitHub säger att första indexeringen kan ta extra tid och tillfälligt använda mer minne, särskilt i stora eller komplexa repositoryn. När den är klar återanvänds och uppdateras indexet dynamiskt. Det är en hypotes om var vinsten finns, inte ett löfte om din kodbas. Just därför behövs ett före/efter-prov.

Frys provet innan du öppnar Copilot CLI

Använd samma dator, repository, commit, byggvariant och Copilot CLI-konfiguration i samtliga körningar. Stäng andra tunga arbetslaster som annars gör minnesvärdet svårt att tolka. Skriv sedan ned två kontrollsymboler med facit: filen där varje symbol definieras och det förväntade antalet relevanta referensplatser. En symbol bör ligga inom en modul; den andra bör gå genom headers och minst två komponenter.

MätprotokollFyll i per körning

Miljö: commit, operativsystem, CLI-version, språkserverversion och sökväg till compile_commands.json

Kall start: klockslag för sessionsstart, första indexrad och färdigstatus i loggen

Resurs: högsta observerade minne för språkserverprocessen och hur ofta du läste av den

Utfall: definition och referenser för symbol A och B, inklusive saknade eller irrelevanta träffar

Varm start: samma fyra tider och resultat efter att första sessionen stängts

Mätmetoden måste vara densamma varje gång. Om du läser processminne var femte sekund i den kalla körningen ska du göra det i den varma och avstängda körningen också. Ett stickprov är inte processens verkliga maxvärde, så kalla kolumnen ”högsta observerade minne” och dokumentera intervallet. På så sätt går resultatet att upprepa utan att låtsas vara mer exakt än mätningen.

Kör baslinjen i två sessioner

Körning A: första indexeringen. Starta Copilot CLI i repositoryts rot och öppna /lsp logs. Notera när språkservern startar, när indexeringen börjar och när loggen visar att den är klar. Under tiden följer du minnet enligt ditt fasta intervall. Ställ inte navigeringsfrågorna förrän du registrerat om indexet fortfarande byggs; annars blandar du väntetid för uppbyggnad med tiden för ett färdigt index.

Be sedan om definitionen för kontrollsymbol A och referenserna för kontrollsymbol B. GitHubs LSP-dokumentation anger att Copilot CLI kan använda bland annat go to definition och find references. Jämför resultatet med ditt facit, inte bara med hur snabbt svaret känns. Ett snabbt men ofullständigt svar är inte en förbättring.

Körning B: återanvänt index. Stäng sessionen helt, starta en ny i samma katalog och upprepa exakt samma två frågor i samma ordning. Följ loggen igen och mät tid till användbart resultat samt högsta observerade minne. Om den andra sessionen går snabbare har du ett lokalt tecken på återanvändning; om den inte gör det ska du först kontrollera loggen och konfigurationen innan du drar slutsatsen att WCI saknar värde.

Ändra inte prompten mellan körningarna

En bred fråga som ”förklara betalningsflödet” beställer mer än kodnavigering och kan ge olika agentarbete. Använd i stället samma konkreta beställning, exempelvis ”hitta definitionen av PaymentRouter::dispatch” respektive ”lista referenser till PaymentResult”. Poängsätt rätt definitionsfil, förväntade referenser och svarstid separat.

Jämför med WCI avstängt utan att stänga språkservern

Microsofts versionslåsta indexeringsinstruktion anger att WCI stängs av genom att sätta JSON-booleanen false för use_symbol_index i användarens state.json. På Windows ligger filen i %LOCALAPPDATA%\mscppls\state.json; på macOS och Linux i $HOME/.mscppls/state.json. Inställningen gäller alla repositoryn för den användaren, inte bara projektet du provar.

{
  "use_symbol_index": false
}

Stäng först alla Copilot CLI-sessioner som använder C++-språkservern. Om filen redan finns ska du lägga till eller uppdatera egenskapen i det befintliga toppobjektet och bevara allt annat. Filen kan innehålla autentiseringsdata och andra användarinställningar: ersätt den inte blint med exemplet, checka inte in den och bifoga den inte i ett publikt felärende. Starta därefter en ny Copilot CLI-session så att inställningen läses in.

Avstängningen tar bort det semantiska symbolindexet, inte hela språkservern. Definitioner och referenser kan fortfarande besvaras via andra analysvägar och kan då ta längre tid. Kör samma två symbolfrågor som tidigare och registrera både korrekthet, tid och minne. Återställ sedan use_symbol_index till true och starta om igen om WCI ska vara teamets normalläge. Observera att den länkade filen är låst till den senaste officiella commit där dokumentet fanns; lanseringssidans aktuella länk gav 404 vid vår kontroll den 23 september 2026.

Ta beslutet med fyra kolumner

Samla resultatet i fyra kolumner: första indexeringens tid, högsta observerade minne, varm svarstid och korrekt symbolutfall. Lägg till det avstängda läget som kontroll. Bestäm i förväg vad som är acceptabelt på de datorer som teamet normalt använder. En kortare varm svarstid väger inte automatiskt upp att första körningen tränger undan bygget, och lägre minne väger inte upp saknade korsmodulreferenser.

Dokumentera också exakt vad som provades: commit, byggvariant, mätintervall och de två symbolerna. Om teamet senare byter byggsystem eller delar upp repositoryt kan samma protokoll köras igen. För en bredare metod att kartlägga en okänd kodbas, använd frågorna för en ärvd kodbas; här är målet smalare och mätbart: om symbolindexet ger korrekta navigeringsresultat till en rimlig lokal kostnad.

Behandla slutligen WCI-inställningen som en verktygskonfiguration med eget kontrakt. Samma princip används i AI-kreatörs guide om att kontraktstesta en AI-integration före förändring: frys indata, mät samma utfall och ändra en sak i taget. Då blir ”det känns snabbare” ett resultat som går att granska – eller förkasta.

Källor

Uppgifterna kontrollerades mot GitHubs och Microsofts primärkällor den 23 september 2026. Mätprotokollet, kontrollsymbolerna och beslutskriterierna är AI-kreatörs föreslagna arbetsmetod.