# Handbok för Nemiver

## Översikt

Nemiver är ett pågående projekt för att skriva en fristående grafisk felsökare som integrerar väl med GNOME:s skrivbordsmiljö. Det har för närvarande en bakände som använder den välkända GNU-felsökaren gdb för att felsöka C / C++-program.

### Perspektiv

Nemiver är designat som en allmän grafisk arbetsyta och ett system med insticksmoduler som kan erbjuda flera olika perspektiv. För närvarande är det enda perspektiv som erbjuds ett felsökningsperspektiv, men i framtiden kan perspektiv läggas till för minnesfelsökning med valgrind eller för profileringsverktyg så som oprofile.

## Komma igång

Detta avsnitt berättar hur du startar Nemiver och ger en grundläggande översikt över programmet.

### Starta Nemiver

Du kan starta Nemiver på följande sätt:

Program-menyn

- Välj Programmering Nemiver felsökare.

Kommandorad

- Skriv `nemiver` och tryck sedan Retur.

  #### Ytterligare kommandoradsflaggor

  Du kan hitta en lista över flaggor som kan anges på kommandoraden till Neimiver genom att skriva `nemiver --help-all`.

### Nemiver-fönstret

När du startar Nemiver kommer du att se ett fönster som liknar det följande:

#### Nemiver-fönstret

Visar Nemivers huvudfönster.

Fönstret Nemiver innehåller följande delar:

Menyrad

- Menyerna i menyraden innehåller alla kommandon du behöver för att använda Nemiver.

Verktygsfält

- Verktygsfältet innehåller de grundläggande felsökningsåtgärderna som kan användas för att köra eller stega genom programmet som felsöks.

Källkodsvy i anteckningsbok

- När källkodsfiler är öppna kommer denna yta att visa källkodsfiler för programmet som felsöks.

Statusanteckningsbok

- Statusanteckningsboken innehåller flera flikar som visar information om programmet som felsöks. Dessa inkluderar följande:

  Stackspårning

- Visar det aktuella tillståndet för anropsstacken för programmet som felsöks.

Variabler

- Visar en lista över alla lokala variabler och funktionsargument tillsammans med deras värden och typer.

Målterminal

- Om programmet som felsöks skriver någon utdata till terminalen kommer den att visas i denna flik.

Brytpunkter

- Denna flik visar en lista över alla brytpunkter som har ställts in. Du kan visa källkoden för en specifik brytpunkt genom att dubbelklicka på ett objekt i listan eller genom att högerklicka och välja Gå till källkod från menyn. Brytpunkter kan dessutom tas bort, aktiveras eller inaktiveras i denna flik. För vidare information om brytpunkter se nemiver-sect-breakpoints.

Register

- Denna flik visar alla CPU-register och deras värden. För vidare information se nemiver-sect-registers.

Minne

- Denna flik visar en vy över det aktuella tillståndet för specifika minnespositioner. För vidare information se nemiver-sect-memory.

### Att välja ett program att felsöka

Det finns flera sätt att börja felsöka ett program. Nemiver låter dig läsa in en lokal körbar fil, läsa in en minnesfil, fästa till en körande process eller ansluta till en fjärrfelsökningsserver.

#### Felsökning av ett körbart program

##### Att använda arbetsytan

För att välja ett körbart program att felsöka, välj Arkiv Körbar fil… vilket bör visa följande dialog:

###### Kördialog

Visar dialogen där den körbara filen väljs

I denna dialog kan du välja programmet som ska felsökas, vilka argument eller flaggor som ska skickas på kommandoraden till den körbara filen, vilken arbetskatalog den körbara filen ska köras i och vilka miljövariabler som ska ställas in när den körbara filen felsöks.

##### Använda kommandoraden

För att från kommandoraden starta ett körbart program att felsöka anges helt enkelt namnet på den körbara filen. Du kan antingen ange en absolut sökväg till den körbara filen, eller om den finns i sökvägen helt enkelt ange basnamnet för den körbara filen. Om till exempel `/usr/bin` finns i din sökväg är dessa båda giltiga:

- `nemiver /usr/bin/programnamn`

- `nemiver programnamn`

###### Ange flaggor på kommandoraden

Om du vill skicka kommandoradsflaggor till programmet som du felsöker bör du omsluta dem i citattecken för att förhindra att Nemiver behandlar dem: `nemiver "programnamn --arg1 --arg2"`.

#### Fäst till ett körande program

##### Att använda arbetsytan

Välj menyobjektet Arkiv Fäst till körande program… vilket bör visa följande dialog:

###### Fästdialog

Visar dialog för att fästa till ett körande program

Välj en process från listan och klicka på OK för att börja felsöka det valda programmet. Det kan finnas flera processer listade i dialogen så du kan filtrera listan så att bara de som du är intresserad av visas genom att skriva in text i textinmatningsrutan precis under listan.

##### Använda kommandoraden

För att fästa till ett körande program från kommandoraden använd flaggan `--attach`. Flaggan `--attach` accepterar antingen en PID eller ett processnamn. Så för att till exempel felsöka den körande processen `foo` som har PID 1121 kan du antingen skriva `nemiver --attach foo` eller `nemiver --attach 1121`.

#### Läsa in en minnesfil

##### Att använda arbetsytan

Välj menyobjektet Arkiv Läs in minnesfil… för att få upp följande dialog som låter dig läsa in en minnesfil:

###### Dialog för att läsa in en minnesfil

Visar dialog för att läsa in en minnesfil

##### Använda kommandoraden

Minnesfiler kan inte läsas in från kommandoraden.

#### Fjärrfelsökning

Nemiver låter dig ansluta till en fjärrfelsökningsserver.

##### Att använda arbetsytan

För att ansluta till en fjärrfelsökningsserver, välj Arkiv Anslut till fjärrmål…

Dialog för fjärrfelsökning

Välj den körbara filen som ska läsas in och platsen där delade bibliotek finns och fyll sedan i detaljerna om anslutningen till fjärrservern.

##### Använda kommandoraden

Nemiver tillhandahåller inte ett sätt att ansluta till en fjärrserver från kommandoraden

## Användning av Nemiver

Detta avsnitt beskriver hur du använder Nemiver för att felsöka ditt program.

### Grundläggande felsökningsåtgärder

De grundläggande felsökningsåtgärderna finns tillgängliga i huvudverktygsfältet, i menyn Felsök och som tangentbordsgenvägar. De vanligaste åtgärderna listas nedan:

Fortsätt

- Startar programmet. Programmet kommer att köra tills det når en brytpunkt eller tills programmet avslutas om det inte avbryts manuellt av att användaren klickar på Stopp. Denna åtgärd kan aktiveras från tangentbordet med F5.

Nästa

- Exekverar nästa sats och stannar när det når nästa rad i denna fil. Vissa felsökare kan kalla denna åtgärd ”Stega över”. Denna åtgärd kan aktiveras från tangentbordet med F6.

Stega

- Exekverar nästa sats, stegar in i funktioner om möjligt. Vissa felsökare kan kalla denna åtgärd ”Stega in”. Denna åtgärd kan aktiveras från tangentbordet med F7.

Stega ut

- Avslutar exekveringen av aktuell funktion och stannar när den når den anropande funktionen. Denna åtgärd kan aktiveras från tangentbordet med Skift F7.

Starta om

- Läser in aktuell körbar fil på nytt och startar exekveringen från början. Denna åtgärd kan aktiveras från tangentbordet med Skift F5.

Stopp

- Avbryter manuellt exekveringen av att program. Denna åtgärd är bara tillgänglig när felsökaren kör den körbara filen (t.ex. efter att användaren har klickat på Fortsätt). Denna åtgärd kan aktiveras från tangentbordet med F9.

Som standard kommer Nemiver, efter att en körbar fil lästs in, att skapa en brytpunkt vid `main()` så att när exekveringen når `main()` kommer den att stanna och vänta på indata. Du kan sedan stega genom programmet, undersöka variabler (se nemiver-sect-inspecting-variables), eller ställa in ytterligare brytpunkter (se nemiver-sect-breakpoints).

### Inspektion av variabler

Nemiver visar en lista över alla lokala variabler i fliken Variabler i Statusanteckningsboken. Om du skulle vilja undersöka en annan variabel (eller till och med ett godtyckligt uttryck), kan du använda Variabelinspektören. För att visa Variabelinspektören välj Felsök Inspektera en variabel. När variabelinspektören visas kommer du att se ett fönster som liknar följande:

Dialog som visar variabelinspektören

Du kan skriva in vilket variabelnamn som helst eller ett enkelt uttryck (så som `pFoo->bar`) i inmatningsrutan och om variabeln är giltig och inom räckvidd kommer den att visa detaljer om det uttrycket.

Alternativt, om du väljer namnet på en variabel i källkodsredigeraren och sedan startar Variabelinspektören kommer den att försöka att visa information om det valda variabelnamnet.

#### Tangentbordsgenvägar

Du kan också starta Variabelinspektören genom att trycka F12.

Nemiver kommer också att låta dig visa en lista över alla globala variabler i ett program i en separat dialog. För att visa dialogen Globala variabler, välj Felsök Visa globala variabler eller tryck Ctrl G.

Dialog för globala variabler

För vissa program (speciellt C++-program) kan listning av alla globala variabler ta väldigt lång tid.

### Ställ in brytpunkter

Det finns flera olika sätt att ställa in brytpunkter i Nemiver. Nemiver ställer automatiskt in en brytpunkt på `main()` när du börjar felsöka en ny körbar fil. Om du vill ställa in ytterligare brytpunkter kan du göra endera av följande:

- Klicka i marginalen intill raden där du vill ha en brytpunkt inställd

- Placera din markör på en rad där du vill att en brytpunkt ska vara finnas och ställ in brytpunkten antingen genom att välja Felsök Växla brytpunkt vid markör eller genom att trycka på F8

- Ställ in en brytpunkt vid ett specifikt funktionsnamn eller vid en specifik plats i en fil genom att välja Felsök Ställ in brytpunkt… eller genom att trycka Ctrl B. Detta kommer att visa en dialog som ser ut som följer:

  Dialog för att ställa in en brytpunkt

  Du kan ange en brytpunkt vid en viss plats i en fil, eller efter funktionsnamn. Om det finns fler än en funktion med samma namn kommer Nemiver att visa en lista över alla matchade funktioner och be dig att välja den du vill ha.

#### Inaktiverade brytpunkter

Brytpunkter kan antingen aktiveras eller inaktiveras. Felsökaren kommer att stanna exekveringen när den når en aktiverad brytpunkt men kommer inte att påverkas av brytpunkter som är i inaktiverat tillstånd. Detta låter dig tillfälligt ta bort en brytpunkt utan att faktiskt ta bort den.

För att inaktivera eller aktivera en brytpunkt, klicka på kryssrutan intill brytpunktsnumret du vill aktivera eller inaktivera i fliken Brytpunkter i Statusanteckningsbok. Alternativt kan du trycka på Skift F8 för att aktivera eller inaktivera brytpunkter som ställs in på den aktuella rad som markören är på.

Följande figurer visar skillnaden mellan aktiverade och inaktiverade brytpunkter i källkodsredigeraren.

Illustration av en aktiverad brytpunkt

Aktiverade brytpunkter

Illustration av en inaktiverad brytpunkt

Inaktiverade brytpunkter

#### Öppna källkodsfiler

Ibland kanske du inte exakt känner till funktionsnamnet eller radnumret där du vill ställa in en brytpunkt så du måste öppna en källkodsfil för att lista ut det. Du skulle kunna öppna godtyckliga filer från filsystemet men Nemiver kan också tillhandahålla en lista över källkodsfiler som användes för att bygga den körbara filen och låta dig välja från denna listan. När du väljer Arkiv Öppna källkodsfil… bör följande fönster visas:

Visar dialog för att öppna källkodsfiler

För att välja en godtycklig fil från filsystemet, välj alternativet Välj från filsystem. För att välja från en lista av filer som producerat den körbara filen, välj Välj från körbar målfil.

##### Att avgöra vilka källkodsfiler som utgör en dynamiskt inläst modul

Om den körbara målfilen läser in moduler i körtid (t.ex. via `dlopen()`) kommer Nemiver inte att kunna avgöra vilka filer som använts för att bygga dessa moduler förrän de faktiskt lästs in.

### Avancerad felsökning

#### Register

Komponenten för registerredigering finns i fliken Register i Statusanteckningsboken. Alternativt kan du trycka Alt F5 för att direkt hoppa till rätt flik.

Komponenten för registerredigering

Denna komponent visar aktuella värden för alla CPU-register. Du kan redigera registervärden genom att klicka i kolumnen Värde och mata in ett nytt värde. Om värde för register ändrats sedan senaste gången felsökaren stannade kommer det att färgmarkeras i rött.

#### Minne

Minneskomponenten låter dig direkt visa ett område av minne. Detta låter dig komma ner till en lägre nivå kring vad som händer när ditt program kör.

Komponenten för minnesredigering

För att visa ett område av minne i komponenten för minnesvisning, mata in en minnesadress i fältet Adress. Om adressen är giltig för programmet som felsöks kommer minnesvyn att visa minnesvärden som börjar på den angivna adressen. Minnesvärde kan visas i byte-, (2 byte) ord- eller (4 byte) långordsformat genom att välja ett alternativ från rullgardinsmenyn Gruppera efter. Minnesvärdena kommer automatiskt att uppdateras allt eftersom du stegar genom programmet.

Förutom att visa minnesvärde kan du också använda komponenten för minnet för att modifiera minnesvärden. Du kan redigera antingen den hexadecimala byte-representationen (den vänstra delen av komponenten för minnet) eller ASCII-representationen (den högra delen av komponenten för minnet). Alla ändringar kommer att tillämpas omedelbart.

## Spara och återuppta sessioner

Nemiver kan spara dina felsökningssessioner åt dig så att du kan återuppta dem vid ett senare tillfälle. Detta inkluderar att spara information så som vilken körbar fil som felsöks, vilka miljövariabler som är inställda och vilka kommandoradsflaggor som angetts till den körbara filen, vilka filer som är öppna och vilka brytpunkter som är inställda så att du kan gå tillbaka till där du senast lämnade så snabbt som möjligt.

### Spara sessioner

Nemiver kommer att spara din session automatiskt vid avslut så du behöver inte ens bry dig om det. Om du däremot uttryckligen vill spara sessioner innan du stänger Nemiver kan du göra det genom att välja Arkiv Spara session till disk.

### Återuppta sparade sessioner

#### Att använda arbetsytan

Välj Arkiv Återuppta sparad session… och välj en session från listan.

##### Sessionsdialogen

Visar dialogen för återupptagning av en sparad session

#### Från kommandoraden

Om du vet vilket sessions-ID sessionen du vill köra har kan du inleda felsökningssessionen från kommandoraden. Om du till exempel vill köra session nummer 3 kan du göra det genom följande kommando: `nemiver --session 3`.

## Om Nemiver

Nemiver skrevs av Dodji Seketeli och Jonathon Jongsma, med bidrag från många fler. För att hitta mer information om Nemiver, besök projektwebbplatsen för Nemiver.

För att rapportera ett fel eller lämna ett förslag kring detta program eller denna manual, se avsnittet Återkoppling i användarguiden för GNOME.

Det här programmet distribueras under villkoren för GNU General Public License så som publicerats av Free Software Foundation; antingen version 2 av licensen, eller (om du så vill) någon senare version. En kopia av den här licensen kan hittas på länk, eller i filen COPYING som inkluderats i källkoden för det här programmet.