How to Find and Fix Bugs in Commercial Software on Windows

volgens Wikipedia, ” een software bug is een fout, Fout, fout of fout in een computerprogramma of systeem dat ervoor zorgt dat het een onjuist of onverwacht resultaat produceert, of zich onbedoeld gedraagt, waardoor de toepassing uiteindelijk crasht. Het proces van het oplossen van bugs wordt genoemd “debugging” en maakt vaak gebruik van formele technieken of tools om bugs te lokaliseren .”

meestal kunnen bugs in een ontwikkelaarsomgeving worden gereproduceerd en opgelost voordat een versie naar productie wordt verzonden. Maar soms zijn bugs afhankelijk van de specifieke omgeving of het profiel van gebruikers—bijvoorbeeld door speciale tekens in een mapnaam te gebruiken—waardoor het moeilijker wordt om de oorzaak van een bug te begrijpen. Voor de ergste bugs is gebruikersondersteuning nodig om een screenshare-sessie in te stellen om een gebruiker een bug te zien reproduceren.

bij Dashlane gebruikt het Windows-team verschillende tools om bugs te vinden en te reproduceren:

  • technische logs om problemen op te sporen en te helpen oplossen, waarbij soms meerdere herhalingen en interactie nodig zijn met de gebruiker die een probleem ondervindt
  • Microsoft Process Monitor en Process Explorer, twee gratis tools die slechte installaties of een beschadigde omgeving opsporen

onlangs introduceerde Microsoft een nieuwe versie van een ander ontwikkelaarstool, WinDbg. Deze applicatie werd geport in een UWP app, is vrij beschikbaar op Microsoft Store, en wordt geleverd met een zeer mooie en handige functie: TTD, of Time Travel Debugging. Denk aan een tijd dat je een zeer moeilijk te reproduceren bug moest repareren die alleen op één specifieke machine gebeurde. Of denk aan de tijd die je besteed aan het installeren van een ontwikkelaar omgeving op die machine-als je kon. En denk dan na over hoe vaak je je applicatie in debug-modus moest starten om de bug te reproduceren, en dan heb je de beschadigde lijn gemist door per ongeluk F5 in plaats van F11 te raken. TTD verandert dit in een fluitje van een cent, omdat je de bug slechts één keer hoeft op te nemen om het steeds opnieuw te laten afspelen, zowel vooruit als achteruit.

tijdreizen debuggen met WinDbg

TTD is een reverse debugging oplossing. Het bestaat uit 3 stappen:

  1. neem de app of het proces op de machine die de bug kan reproduceren. Gebruik WinDbg met admin rechten en start een uitvoerbaar bestand, of koppelen aan een al actief om de trace op te nemen. Het resultaat is een bestand (.run extension) met alle informatie om de bug te reproduceren. Om deze reden, bij Dashlane kunnen we het alleen gebruiken om fouten te debuggen die gebeuren voordat u inlogt, zodat u geen gevoelige informatie van gebruikers verzamelt.
  2. Speel het geregistreerde spoor zo vaak mogelijk vooruit en achteruit af als nodig is om het probleem te begrijpen. Eenmaal geladen, WinDbg creëert een index van de trace, die volledige en snelle geheugen lookup biedt. Het opgenomen bestand kan op elke machine worden geladen; we openen meestal op een ontwikkelaar machine, waar we broncode en PDB symbolen kunnen laden. Op deze manier kunnen we de trace opnieuw afspelen terwijl we code draaien in onze IDE met proces-en geheugenrecords van de opgenomen machine. (Zorg ervoor dat de broncode en symbolen overeenkomen met de opgenomen procesversie.)
  3. analyseer door breekpunten toe te voegen, zoekopdrachten uit te voeren om veelvoorkomende codeproblemen te identificeren en volledige toegang te krijgen tot het geheugen en de lokale bevolking om te begrijpen wat er aan de hand is.

voorbeeld

stel dat u een eenvoudige console-toepassing hebt geschreven en gebouwd.

void GuiltyFunction(int a, int b, int c)
{
int x = a + b + c;
int y = 0;
y = x / b;
}
int main()
{
int a = 10;
int b = 0;
int c = 3;
GuiltyFunction(a, b, c);
return 0;
}

Laten we aannemen dat de ontwikkelde applicatie (TestTTD.exe) en het symbool bestand (TestTTD.VOB) zijn in C:\TestTTD\bin, en de broncode is in C:\TestTTD\src.

Record

  1. Open WinDbg met verhoogde rechten.
  2. op het tabblad Bestand, kies uitvoerbaar starten (geavanceerd). Voer in het uitvoerbare veld C:\TestTTD\TestTTD.executable. Controleer Recordproces met tijdreizen Debugging, stel de uitvoermap in op een beschrijfbaar en bestaand pad en klik vervolgens op OK.
  3. als de toepassing crasht, slaat WinDbg een trace-bestand op (.run extension) en logt de locatie tijdens het laden.
  4. Stop de debugger en open de locatie van het trace-bestand.

Replay

  1. Open WinDbg.
  2. op het tabblad Bestand, selecteer Instellingen in de linkerzijbalk. Selecteer Debuginstellingen, toevoegen C:\TestTTD\src naar het veld bronpad en C:\TestTTD\bin naar het veld symbool pad. Klik op OK om de wijzigingen op te slaan.
  3. op het tabblad Bestand, selecteer trace-bestand openen en blader naar het trace-bestand dat is aangemaakt bij de Recordstap.

analyseer

  1. zodra het opgenomen trace-bestand is geladen in WinDbg, voegt u een breekpunt toe om de status van de toepassing te stoppen en te analyseren. Laad een scriptbestand van het tabblad Bron en klik vervolgens op de linkerkant van de rij van het gewenste breekpunt. Druk op F5 om naar het breekpunt te lopen.
  2. druk nu op F10 om over te stappen, zoals in een Visual Studio debugging sessie. Klik op stap terug om terug te draaien.

conclusies

bij het debuggen van productiecode en nauwelijks reproduceerbare bugs, zijn WinDbg en zijn tijdreizen Debug een geweldig hulpmiddel voor ontwikkelaars die kunnen helpen tijd en middelen te besparen door de defecte applicatie alleen op de getroffen omgeving op te nemen en u de mogelijkheid te geven om het overal af te spelen. Ga voor meer informatie naar Microsoft blog of bekijk hun demo op de website van MSDN Channel 9.

Leave a Reply

Het e-mailadres wordt niet gepubliceerd.