Gdb print variabel binär alternativ


Något generiskt hjälpmedel: gdb starta GDB, utan felsökning les gdb-program starta felsökningsprogram gdb-program kärnfelsökning kärnkärnkärna som produceras av programmet gdb --help beskriva kommandoradsalternativ 1 - Först och främst hitta katalogen där kärnfiler genereras. 2- Använd sedan ls - ltr-kommandot i katalogen för att hitta den senaste genererade corefilen. 3- För att ladda kärnfilen använd gdb binär sökväg av kärnfilen Detta laddar kärnfilen. 4- Då kan du få informationen med hjälp av bt-kommandot. För detaljerad backtrace använd bt full. 5- För att skriva ut variablerna, använd variabelnamnet för namn eller p-variabelnamn 6- För att få hjälp med gdb-användningsalternativet eller använd sökordets ämne 7- Använd ramramsnummer för att gå till önskat ramnummer. 8- Använd upp n och ned n kommandon för att välja ramn n ramar upp och välj ram n-ramar ned respektive. 9- För att sluta använda gdb sluta eller q .8. Granska data Det vanliga sättet att granska data i ditt program är med utskriftskommandot (förkortat p) eller dess synonym inspektera. Det utvärderar och skriver ut värdet av ett uttryck för det språk som ditt program skrivs in (se avsnittet Använda GDB med olika språk). print expr print f expr expr är ett uttryck (i källspråk). Som standard skrivs värdet av expr i ett format som är lämpligt för dess datatyp, du kan välja ett annat format genom att ange f. där f är ett brev som anger formatet, se Utgångsformat. tryck utskrift f Om du släpper ut expr. GDB visar det sista värdet igen (från värdehistoriken se avsnittet Värdeshistorik). På så sätt kan du enkelt inspektera samma värde i ett alternativt format. Ett mer lågt sätt att granska data är med x-kommandot. Den undersöker data i minnet vid en viss adress och skriver ut det i ett visst format. Se avsnitt Undersök minne. Om du är intresserad av information om typer, eller om hur fälten i en struktur eller en klass förklaras, använd kommandot ptype exp istället för att skriva ut. Se avsnittet Utforska symboltabellen. 8.1 Expressionsutskrift och många andra GDB-kommandon accepterar ett uttryck och beräknar dess värde. Vilken typ av konstant, variabel eller operatör som definieras av det programmeringsspråk du använder är giltigt i ett uttryck i GDB. Detta inkluderar villkorliga uttryck, funktionssamtal, gjutningar och strängkonstanter. Det innehåller tyvärr inte symboler definierade av preprocessor definiera kommandon. GDB stöder arraykonstanter i uttryck som skrivs in av användaren. Syntaxen är. . Till exempel kan du använda kommandotrycket för att bygga upp en array i minnet som är malloc ed i målprogrammet. Eftersom C är så utbredd är de flesta uttryck som visas i exemplen i den här handboken i C. Se avsnittet Använda GDB med olika språk. för information om hur man använder uttryck på andra språk. I det här avsnittet diskuterar vi operatörer som du kan använda i GDB-uttryck, oavsett ditt programmeringsspråk. Casts stöds på alla språk, inte bara i C, eftersom det är så användbart att kasta ett nummer i en pekare för att undersöka en struktur på den adressen i minnet. GDB stöder dessa operatörer, förutom de som är gemensamma för programmeringsspråk: är en binär operatör för behandling av delar av minnet som arrays. Se avsnitt Artificiella arrays. för mer information. :: låter dig ange en variabel vad gäller filen eller funktionen där den definieras. Se avsnitt Programvariabler. addr Hänvisar till ett objekt av typtyp som lagras på adressen addr i minnet. addr kan vara något uttryck vars värde är ett heltal eller en pekare (men parenteser krävs runt binära operatörer, precis som i en cast). Denna konstruktion är tillåten oavsett vilken typ av data normalt borde bo på addr. 8.2 Programvariabler Den vanligaste typen av uttryck att använda är namnet på en variabel i ditt program. Variabler i uttryck förstås i den valda stapelramen (se avsnittet Välja en ram) de måste vara antingen: globala (eller filstatiska) synliga enligt räckviddsreglerna för programmeringsspråket från exekveringspunkten i den ramen. Det betyder att I funktionen kan du undersöka och använda variabeln a när ditt program exekveras inom funktionen foo. men du kan bara använda eller undersöka variabeln b medan ditt program körs inuti blocket där b är deklarerat. Det finns ett undantag: Du kan referera till en variabel eller funktion vars räckvidd är en enda källfil även om den aktuella körpunkten inte finns i den här filen. Men det är möjligt att ha mer än en sådan variabel eller funktion med samma namn (i olika källfiler). Om det händer, har hänvisning till det namnet oförutsägbara effekter. Om du vill kan du ange en statisk variabel i en viss funktion eller fil, med kolon-kolonnotationen: Här är filen eller funktionen namnet på kontexten för den statiska variabeln. När det gäller filnamn kan du använda citat för att se till att GDB analyserar filnamnet som ett enda ord - till exempel att skriva ut ett globalt värde av x definierat i f2.c. Denna användning av :: är mycket sällan i konflikt med den mycket liknande användningen av samma notation i C. GDB stöder också användningen av C-upplösningsoperatören i GDB-uttryck. Varning: En lokal variabel kan ibland tyckas ha felaktigt värde vid vissa punkter i en funktion - strax efter inmatning till ett nytt räckvidd, och strax före utgången. Du kan se detta problem när du går igenom maskininstruktioner. Det beror på att på de flesta maskiner krävs det mer än en instruktion för att ställa in en stapelram (inklusive lokala variabla definitioner) om du går igenom maskininstruktionerna, kan variablerna ha felaktiga värden tills stapelramen är helt byggd. Vid avfarten tar det vanligtvis också mer än en maskininstruktion för att förstöra en stapelram när du börjar gå igenom den här instruktionsgruppen, kan lokala variabla definitioner vara borta. Detta kan också hända när kompilatorn gör betydande optimeringar. För att vara säker på att du alltid ser korrekta värden, stäng av alla optimeringar när du sammanställer. En annan möjlig effekt av kompilatoroptimeringar är att optimera oanvända variabler ur existens, eller tilldela variabler till register (i motsats till minnesadresser). Beroende på stöd för sådana fall som erbjuds av felsökningsinformationsformat som används av kompilatorn kanske GDB inte kan visa värden för sådana lokala variabler. Om det händer, kommer GDB att skriva ut ett meddelande så här: För att lösa sådana problem, antingen kompilera utan optimeringar, eller använd ett annat felsökningsformat, om kompilatorn stöder flera sådana format. Till exempel, GCC, stödjer GNU CC-kompilatorn vanligtvis alternativet - gstabs. - gstabs producerar felsökningsinformation i ett format som överstiger format som COFF. Du kan kanske använda DWARF2 (-gdwarf-2), vilket också är en effektiv form för felsökningsinformation. Se avsnittet Alternativ för att felsöka ditt program eller GNU CC i Använda GNU CC. för mer information. Den vänstra operandan måste finnas i minnet. Arrayvärden som gjorts med på detta sätt beter sig som andra arrays när det gäller prenumeration, och dras till pekare när de används i uttryck. Konstgjorda arrays förekommer oftast i uttryck via värdehistoriken (se avsnittet Värdeshistorik), efter utskrift av en ut. Ett annat sätt att skapa en artificiell array är att använda en gjutning. Detta tolkar ett värde som om det var en matris. Värdet behöver inte vara i minnet: Som en bekvämlighet, om du lämnar arraylängden (som i (typ) värde) beräknar GDB storleken för att fylla värdet (som sizeof (value) sizeof (typ). Ibland är den konstgjorda matrisen mekanismen är inte tillräckligt med i måttligt komplexa datastrukturer, kan intressentelementen faktiskt inte vara intilliggande - till exempel om du är intresserad av värdena på pekare i en array. En användbar arbetsplats i denna situation är att använda en bekvämlighetsvariabeln (se avsnittet Convenience variables) som en räknare i ett uttryck som skriver ut det första intressanta värdet, och upprepa det där uttrycket via RET. Antag att du har en array dtab av pekare till strukturer och du är intresserad av värdena av ett fält fv i varje struktur. Här är ett exempel på vad du kan skriva: 8.4 Utmatningsformat Som standard skriver GDB ett värde enligt datatypen. Ibland är det inte vad du vill. Du kan till exempel skriva ut ett tal i hex eller en po inter i decimal. Eller du kanske vill visa data i minnet vid en viss adress som en teckensträng eller som en instruktion. För att göra dessa saker anger du ett utdataformat när du skriver ut ett värde. Den enklaste användningen av utdataformat är att säga hur man skriver ut ett redan beräknat värde. Detta görs genom att starta argumenten för utskriftskommandot med ett snedstreck och ett formatbrev. Stödformatbokstäverna är: x Betrakta bitarna av värdet som ett heltal och skriv heltalet i hexadecimalt. d Skriv ut som heltal i undertecknat decimal. u Skriv ut som heltal i unsigned decimal. o Skriv ut som heltal i oktal. t Skriv ut som heltal i binärt. Bokstaven t står för två. (2) a Skriv ut som en adress, både absolut i hexadecimal och som en förskjutning från närmaste föregående symbol. Du kan använda det här formatet för att upptäcka var (i vilken funktion) en okänd adress finns: Kommandosinfosymbolen 0x54320 ger liknande resultat. Se avsnittets informationssymbol. c Betrakta som ett heltal och skriv ut det som en teckenkonstant. f Betrakta bitarna av värdet som ett flytpunktsnummer och skriv ut med hjälp av typisk flytpunkts syntax. Till exempel, för att skriva ut programräknaren i hex (se avsnitt 8.10 Register), skriv Obs att inget mellanslag krävs innan snedstrecket detta beror på att kommandonamn i GDB inte kan innehålla ett snedstreck. För att skriva ut det sista värdet i värdeshistoriken med ett annat format kan du använda kommandot Skriv ut med bara ett format och inget uttryck. Exempelvis skriver px det sista värdet i hex. 8.5 Undersöka minnet Du kan använda kommandot x (för att undersöka) för att undersöka minnet i något av flera format, oberoende av dina programdatatyper. x nfu addr x addr x Använd kommandot x för att undersöka minne. n. f. och du är alla valfria parametrar som anger hur mycket minne som ska visas och hur du formaterar det addr är ett uttryck som anger adressen där du vill börja visa minne. Om du använder standard för nfu. du behöver inte skriva snedstrecket. Flera kommandon anger lämpliga standardvärden för addr. n. repetitionsräkningen Upprepningsräkningen är ett decimaltalstal, standardvärdet är 1. Det specificerar hur mycket minne (räknar med enheter u) som ska visas. f. Bildformatet Bildformatet är ett av de format som används av utskrift. s (nollställd sträng), eller jag (maskininstruktion). Standardvärdet är initialt x (hexadecimal). Standard ändras varje gång du använder antingen x eller skriv ut. u. enhetens storlek Enhetsstorleken är vilken som helst av b Bytes. h Halfwords (två byte). w Ord (fyra byte). Detta är standardinställningen. g jätteord (åtta byte). Varje gång du anger en enhetsstorlek med x. den storleken blir standardenheten nästa gång du använder x. (För s och i-format ignoreras enhetens storlek och skrivs normalt inte.) Addr. startadressadressen addr är adressen där du vill att GDB ska börja visa minnet. Uttrycket behöver inte ha ett pekarvärde (även om det kan) det tolkas alltid som en heltalsadress för en minnesbyte. Se avsnittet Uttryck. för mer information om uttryck. Standard för addr är vanligtvis strax efter den senaste adressen som granskades - men flera andra kommandon ställer även in standardadressen: informationsbrytningspunkter (till adressen till den sista punkten som anges), informationslinjen (till startadressen för en rad) och skriv ut (om du använder den för att visa ett värde från minnet). Exempelvis är x3uh 0x54320 en förfrågan om att visa tre halveringar (h) minne, formaterade som osignerade decimaltal (u), från adress 0x54320. x4xw sp skriver ut de fyra orden (w) i minnet ovanför stapelpekaren (här, se avsnittet Registren) i hexadecimal (x). Eftersom bokstäverna som anger enhetsstorlekarna skiljer sig från bokstäverna som anger utmatningsformat, behöver du inte komma ihåg huruvida enhetsstorlek eller format kommer först, antingen fungerar order. Utgångsspecifikationerna 4xw och 4wx betyder exakt samma sak. (Men räkningen n måste komma först wx4 fungerar inte.) Även om enhetsstorleken ignoreras för formatet s och i. du kanske vill använda en räkning n till exempel, 3i anger att du vill se tre maskininstruktioner, inklusive eventuella operander. Kommando demonteringen ger ett alternativt sätt att inspektera maskininstruktionerna, se Källa och maskinkod. Alla standardvärden för argumenten till x är utformade för att göra det enkelt att fortsätta skanna minnet med minimala specifikationer varje gång du använder x. Till exempel, efter att du har inspekterat tre maskininstruktioner med x3i addr. du kan inspektera nästa sju med bara x7. Om du använder RET för att upprepa x-kommandot, används repetitionsräknaren n igen de andra argumenten som standard för successiva användningar av x. Adresserna och innehållet som skrivs ut av kommandot x sparas inte i värdeshistoriken eftersom det ofta är för mycket av dem och de skulle komma i vägen. Istället gör GDB dessa värden tillgängliga för efterföljande användning i uttryck som värden för bekvämlighetsvariablerna och. Efter ett x-kommando är den senast undersökta adressen tillgänglig för användning i uttryck i bekvämlighetsvariabeln. Innehållet i den adressen, som undersökt, finns tillgänglig i bekvämlighetsvariabeln. Om x-kommandot har en upprepningsräkning är den sparade adressen och innehållet från den senaste minnesenheten som skrivs ut, det här är inte samma som den sista adressen som skrivs ut om flera enheter skrivits ut på den sista utmatningslinjen. 8.6 Automatisk visning Om du tycker att du vill skriva ut värdet på ett uttryck ofta (för att se hur det ändras) kanske du vill lägga till det i den automatiska visningslistan så att GDB skriver ut värdet varje gång programmet stannar. Varje uttryck som läggs till i listan ges ett nummer för att identifiera det för att ta bort ett uttryck från listan, du anger det numret. Den automatiska displayen ser ut så här: Denna display visar artikelnummer, uttryck och deras nuvarande värden. Som med skärmar begär du manuellt att använda x eller skriva ut. Du kan ange det utmatningsformat du föredrar faktiskt, displayen bestämmer om du vill använda utskrift eller x beroende på hur utarbetat formatspecifikationen är - den använder x om du anger en enhetsstorlek eller ett av de två formaten (i och s) som endast stöds av x annars använder den utskrift. visa expr Lägg till uttrycket expr i listan över uttryck som ska visas varje gång programmet stannar. Se avsnittet Uttryck. displayen upprepar inte om du trycker på RET igen efter användning. visa fmt expr För fmt som bara anger ett visningsformat och inte en storlek eller räknat, lägg till uttrycket expr till auto-displaylistan men ordna att visa den varje gång i det angivna formatet fmt. Se avsnittet Utgångsformat. display fmt addr För fmt i eller s. eller inkludera en enhetsstorlek eller ett antal enheter, lägg till expressionsaddr som en minnesadress som ska granskas varje gång programmet stannar. Undersökning innebär i själva verket att göra x fmt addr. Se avsnitt Undersök minne. Displayi-datorn kan till exempel vara till hjälp för att se maskininstruktionen om att utföras varje gång körningen slutar (pc är ett vanligt namn för programräknaren, se avsnittet Register). undisplay dnums. radera displaydnums. Ta bort artikelnummer dnums från listan över uttryck som ska visas. uppspelning upprepar inte om du trycker på RET efter att du har använt den. (Annars skulle du bara få felet Ingen visningsnummer.) Inaktivera displaydnums. Inaktivera visning av artikelnummer dnums. Ett inaktiverat visningsobjekt skrivs inte ut automatiskt men glöms inte. Det kan aktiveras igen senare. aktivera visning dnums. Aktivera visning av artikelnummer dnums. Det blir ännu en gång i automatisk visning av dess uttryck tills du anger något annat. display Visa aktuella värden för uttrycken i listan, precis som det gör när programmet slutar. informationsdisplay Skriv ut listan över uttryck som tidigare konfigurerats för att visas automatiskt, var och en med dess artikelnummer, men utan att visa värdena. Detta inkluderar funktionshindrade uttryck, vilka är markerade som sådana. Det innehåller också uttryck som inte skulle visas just nu eftersom de refererar till automatiska variabler som inte är tillgängliga för tillfället. Om ett visningsuttryck hänvisar till lokala variabler är det inte meningslöst utanför det lexiska sammanhanget för vilket det sattes upp. Ett sådant uttryck är inaktiverat när körningen går in i ett sammanhang där en av dess variabler inte är definierad. Om du till exempel anger kommandotidningen lastchar medan du är inne i en funktion med ett argument lastchar. GDB visar detta argument medan programmet fortsätter att stoppa inuti den funktionen. När den stannar någon annanstans - där det inte finns någon variabel lastchar --- är skärmen avstängd automatiskt. Nästa gång ditt program slutar där lastchar är meningsfullt kan du aktivera visningsuttrycket igen. Du kan använda inställd skrivadress för att eliminera alla maskinberoende skärmar från GDB-gränssnittet. Till exempel, med utskriftsadress avstängd. Du borde få samma text för backtraces på alla maskiner - oavsett om de involverar pekarargument. visa utskriftsadress Visa om adresser ska skrivas ut eller inte. När GDB skriver ut en symbolisk adress skriver den normalt den närmaste tidigare symbolen plus en förskjutning. Om den symbolen inte identifierar adressen unikt (till exempel är det ett namn vars räckvidd är en enda källfil) kan du behöva förtydliga. Ett sätt att göra detta är med info line. till exempel info linje 0x4537. Alternativt kan du ställa in GDB för att skriva ut källfilen och radnummer när den skriver ut en symbolisk adress: Ange utskriftssymbolens filnamn på Tell GDB för att skriva ut källfilnamnet och radnummer för en symbol i den symboliska formen av en adress. Ange utskriftssymbolens filnamn Av skriv inte ut källfilnamn och radnummer för en symbol. Detta är standardvärdet. visa utskriftssymbol-filnamn Visa om GDB ska skriva ut källfilnamnet och radnumret för en symbol i den symboliska formen av en adress. En annan situation där det är användbart att visa symbolfilnamn och radnummer är när demontering av kod GDB visar linjenummer och källfil som motsvarar varje instruktion. Du kan också önska att bara se den symboliska formulären om adressen som skrivs ut är rimligen nära närmsta tidigare symbol: Sätta ut maximal symbolisk offset-max-offset Berätta GDB för att bara visa den symboliska formen av en adress om förskjutningen mellan Närmaste tidigare symbol och adressen är mindre än max-offset. Standardvärdet är 0, vilket berättar för GDB att alltid skriva ut den symboliska formen av en adress om någon symbol föregår den. visa utskrift max-symbolisk-offset Fråga hur stor maximal offset är att GDB skriver ut i en symbolisk adress. Om du har en pekare och du inte är säker på var den pekar, försök att ställa in skrivarsymbolens filnamn. Då kan du bestämma namnet och källfilen för variabeln där den pekar, med pa-pekare. Detta tolkar adressen i symbolisk form. Exempelvis visar GDB att en variabel ptt pekar vid en annan variabel t. definierad i hi2.c. Varning: För pekare som pekar på en lokal variabel, visar pa inte referensens namn och filnamn, även med lämpliga inställda utskriftsalternativ. Andra inställningar styr hur olika typer av objekt skrivs ut: Ställ in skrivaruppsättningsutskriftsarray på Pretty print array. Det här formatet är mer bekvämt att läsa men använder mer utrymme. Standard är avstängd. Ställ in utskriftsmatrisen Återgå till komprimerat format för skivor. visa utskriftsmatris Visa om komprimerat eller vackert format är valt för att visa arrayer. Ange antal element av element i skrivelementet Ange en gräns för hur många element i en array GDB ska skrivas ut. Om GDB skriver ut en stor matris, stoppas det med att skriva ut efter att det har skrivit ut antalet element som ställts in av kommandot inställda utskriftselement. Denna gräns gäller även för visning av strängar. När GDB startar, är denna gräns inställd på 200. Att ställa in antal-of-element till noll betyder att utskriften är obegränsad. visa utskriftselementer Visa antalet element i en stor grupp som GDB kommer att skriva ut. Om siffran är 0, är ​​utskriften obegränsad. ställa in skriv nollstopp Orsak GDB för att sluta skriva ut tecknen i en array när den första NULL stöter på. Detta är användbart när stora arrayer faktiskt bara innehåller korta strängar. Standard är avstängd. sätt skriv ut ganska på grund av GDB för att skriva ut strukturer i ett indryckt format med en medlem per rad, så här: sätt skrivet ganska litet på grund av att GDB skriver ut strukturer i ett kompakt format, så här: Detta är standardformatet. visa print pretty Visa vilket format GDB använder för att skriva ut strukturer. Ange sjubit-strängar på Skriv ut med endast sju-bitars tecken om det här alternativet är inställt visar GDB några åtta-bitars tecken (i strängar eller teckenvärden) med anmärkningen nnn. Den här inställningen är bäst om du arbetar på engelska (ASCII) och du använder den höga ordens bitar som en markör eller meta bit. Ställ in sjubitsträngar Skriv ut hela åtta bitars tecken. Detta gör det möjligt att använda fler internationella teckenuppsättningar och är standardvärdet. visa utskrivna sevenbit-strängar Visa om GDB skriver ut endast sju-bitars tecken. sätt skrivförening på Tell GDB för att skriva ut fackföreningar som finns i strukturer. Detta är standardinställningen. Ställ in utskriftsförbundet Meddela GDB att inte skriva ut fackföreningar som finns i strukturer. visa utskriftsunionen Fråga GDB om det kommer att skriva ut fackföreningar som finns i strukturer. Till exempel, med tanke på deklarationerna Dessa inställningar är av intresse när felsökning C-program: ställ ut demangle-uppsättning skriv ut demangle på Print C-namnen i deras källform snarare än i den kodade (manglade) formen som skickas till assembler och linker för typsäker koppling . Standard är på. visa skriv ut demangle Visa om C-namn skrivs ut i ofrivet eller borttaget form. ställa in skriv ut asm-demangle set print asm-demangle på Print C namn i deras källform snarare än deras manglade form, även i assembler kodutskrifter som instruktions demonteringar. Standard är avstängd. visa utskrift asm-demangle Visa om C-namn i monteringsförteckningar skrivs ut i manglad eller borttagen form. Ställ in demangestilstil Välj mellan flera kodningssystem som används av olika kompilatorer för att representera C-namn. Valet för stil är för tillfället: auto Tillåt GDB att välja en avkodningsstil genom inspektion av ditt program. gnu Decode baserat på GNU C compiler (g) kodningsalgoritmen. Detta är standardvärdet. hp-avkodning baserat på HP ANSI C (aCC) kodningsalgoritmen. lucid Decode baserat på Lucid C compiler (lcc) kodningsalgoritmen. arm-avkodning med algoritmen i C-notifierad referenshandbok. Varning: Den här inställningen är inte tillräcklig för att tillåta debugging cfront-genererade körbara filer. GDB skulle kräva ytterligare förbättringar för att tillåta det. Om du släpper ut stil. Du får se en lista över möjliga format. visa demangle-stil Visa kodningsstilen som för närvarande används för avkodning av C-symboler. Ange utskriftsobjektets inställda utskriftsobjekt När du visar en pekare på ett objekt, identifiera objektets egentliga (härledda) typ i stället för den angivna typen, med hjälp av den virtuella funktionstabellen. Ställ in utskriftsobjekten Visa endast den angivna typen av objekt, utan hänvisning till den virtuella funktionstabellen. Detta är standardinställningen. visa utskriftsobjekt Visa om aktuella eller deklarerade objekttyper visas. ställ ut statiska medlemmar, skriv ut statiska medlemmar på utskriftsstatiska medlemmar när de visar ett C-objekt. Standard är på. Ställ ut statiska medlemmar ut Skriv inte ut statiska medlemmar när du visar ett C-objekt. visa utskrivna statiska medlemmar Visa om C-statiska medlemmar är utskrivna, eller inte. ställ ut vtbl-skriv utskrift vtbl på Pretty C-virtuella funktionstabeller. Standard är avstängd. (Vtbl-kommandona fungerar inte på program som kompilerats med HP ANSI C-kompilatorn (aCC).) Ställ in skriv ut vtbl av Skriv inte ut C virtuella funktionstabeller. visa utskrift vtbl Visa om C virtuella funktionstabeller är ganska utskrivna, eller inte. 8.9 Komfortvariabler GDB ger bekvämlighetsvariabler som du kan använda inom GDB för att hålla fast vid ett värde och referera till det senare. Dessa variabler existerar helt inom GDB, de är inte en del av ditt program, och inställning av en bekvämlighetsvariabel har ingen direkt effekt på ytterligare utförande av ditt program. Det är därför du kan använda dem fritt. Conveniencevariabler är prefixed med. Vilket namn som föregås av kan användas för en bekvämlighetsvariabel, såvida det inte är ett av de fördefinierade maskinspecifika registernamnen (se avsnittet Register). (Värdeshistorikreferenser är däremot siffror som föregås av. Se avsnittet Värdeshistorik.) Du kan spara ett värde i en bekvämlighetsvariabel med ett uppdragsuttryck, precis som du skulle ställa in en variabel i ditt program. Till exempel: skulle spara i foo det värde som finns i objektet som anges av objectptr. Med hjälp av en bekvämlighetsvariabel för första gången skapas det, men dess värde är ogiltigt tills du tilldelar ett nytt värde. Du kan när som helst ändra värdet med ett annat uppdrag. Bekvämlighetsvariabler har inga fasta typer. Du kan tilldela en bekvämlighetsvariabel vilken typ av värde som helst, inklusive strukturer och arrayer, även om den variabeln redan har ett värde av en annan typ. Bekvämlighetsvariabeln, när den används som ett uttryck, har typen av dess nuvarande värde. visa bekvämlighet Skriv ut en lista över bekvämlighetsvariabler som hittills används och deras värden. Förkortad show conv. Ett sätt att använda en bekvämlighetsvariabel är som en räknare som ska ökas eller att en pekare ska avanceras. Till exempel, för att skriva ut ett fält från successiva element i en rad strukturer: Upprepa det här kommandot genom att skriva RET. Några bekvämighetsvariabler skapas automatiskt av GDB och givna värden är troligen användbara. Variabeln ställs automatiskt in av x-kommandot till den senaste adressen som undersökts (se avsnittet Undersök minne). Andra kommandon som anger en standardadress för att x ska undersöka även inställd på den adressen är dessa kommandon inkluderar informationslinje och informationsbrytningspunkt. Typen är tom, utom när den ställs av x-kommandot, i vilket fall det är en pekare på typen av. Variabeln ställs automatiskt in av kommandot x till det värde som hittades i den sista adressen som undersöktes. Dess typ är vald för att matcha formatet där data utskrives. exitcode Den variabla exitkoden ställs automatiskt in på utgångskoden när programmet som debugges slutar. På HP-UX-system, om du refererar till en funktion eller ett variabelnamn som börjar med ett dollar tecken, söker GDB först efter en användare eller ett systemnamn innan det söker efter en bekvämlighetsvariabel. 8.12 Minnesregistreringsegenskaper Egenskaper för minnesregioner gör att du kan beskriva speciell hantering som krävs av regioner i ditt målminne. GDB använder attribut för att avgöra om vissa typer av minnesåtkomst ska tillåtas, om du vill använda specifika breddstillträden och huruvida du ska cache målminnet. Definierade minnesområden kan aktiveras individuellt och inaktiveras. När en minnesregion är avaktiverad använder GDB standardattributen när man öppnar minne i den regionen. På liknande sätt, om inga minnesregioner har definierats, använder GDB standardattributen när man åtkomst till allt minne. När en minnesregion är definierad, ges den ett nummer för att identifiera det för att aktivera, inaktivera eller ta bort en minnesregion, anger du det numret. mem adress1 adress2 attribut. Definiera minnesregion begränsad av adress1 och adress2 med attribut attributter. . radera mem nums. Ta bort minnesregionerna nummers. . inaktivera mem num. Inaktivera minnesregioner nummer. . En funktionshindrad minnesregion är inte bortglömd. Det kan aktiveras igen senare. aktivera minnesnummer. Aktivera minnesregioner nummer. . info mem Skriv ut en tabell med alla definierade minnesområden med följande kolumner för varje region. Minnesregistreringsnummer Aktiverat eller Inaktiverat. Aktiverade minnesregioner är markerade med y. Inaktiverade minnesregioner är markerade med n. Lo Adress Den adress som definierar den inkommande nedre gränsen för minnesområdet. Hej Adress Adressen definierar den exklusiva övre gränsen för minnesområdet. Attribut Listan över attribut som är inställda för denna minnesregion. 8.13 Kopiera mellan minne och en fil Kommandona dumpar. bifoga. och återställning används för att kopiera data mellan målminne och en fil. Data skrivs in i en fil med dumpning eller append. och återställs från en fil till minnet genom att använda återställningen. Filer kan vara binära, srec, intel hex eller tekhex (men endast binära filer kan läggas till). dump binärminne filnamn startaddr endaddr Dumpa innehållet i minne från startaddr till endaddr till rå binärformat filfilnamn. lägg till binärt minne filnamn startaddr endaddr Lägg till innehållet i minnet från startaddr till endaddr till raw binärformat fil filnamn. dump binärvärde filnamnsexpression Dumpvärde av uttryck i rå binärformat filfilnamn. lägg till binär minne filnamn uttryck Lägg till värdet av uttrycket till rå binärformat fil filnamn. dumpa ihex minne filnamn startaddr endaddr Dumpa innehållet i minne från startaddr till endaddr till Intel hex format fil filnamn. dumpa ihex värde filnamn uttryck Dump värde av uttryck i intel hex format fil filnamn. dumpa srec minne filnamn startaddr endaddr Dumpa innehållet i minne från startaddr till endaddr till srec format fil filnamn. dump srec värde filnamn uttryck Dump värde av uttryck i srec format fil filnamn. dump tekhex minne filnamn startaddr endaddr Dumpa innehållet i minne från startaddr till endaddr till texthex filfil filnamn. dump tekhex värde filnamn uttryck Dump värdet av uttrycket i tekhex format fil filnamn. Återställ filnamnens binära bias start-slut Återställ innehållet i filfilnamnet i minnet. Återställningskommandot kan automatiskt identifiera alla kända bfd-filformat, med undantag för rå binär. För att återställa en rå binärfil måste du använda det valfria argumentet binärt efter filnamnet. Om bias är noll, läggs dess värde till adresserna i filen. Binära filer börjar alltid vid adress noll, så de kommer att återställas vid adressförskjutning. Andra bfd-filer har ett inbyggt läge, de kommer att återställas vid förskjutning från den platsen. Om start och slut är icke-noll, kommer endast data mellan filförskjutningsstart och filförskjutningsänden att återställas. Dessa förskjutningar är i förhållande till adresserna i filen innan bias-argumentet tillämpas.18.1 Kommandon för att ange filer Du kanske vill ange exekverbara och kärna dumpa filnamn. Det vanliga sättet att göra detta är vid uppstartstid, med argumenten till gdb s startkommandon (se Komma in och ut ur gdb). Ibland är det nödvändigt att byta till en annan fil under en gdb-session. Eller du kan köra gdb och glömma att ange en fil du vill använda. Eller du debugger ett fjärrmål via gdbserver (se fil). I dessa situationer är gdb-kommandon för att ange nya filer användbara. filfilnamn Använd filnamn som det program som ska debuggeras. Den läses för dess symboler och för innehållet i rent minne. Det är också programmet som körs när du använder körkommandot. If you do not specify a directory and the file is not found in the gdb working directory, gdb uses the environment variable PATH as a list of directories to search, just as the shell does when looking for a program to run. You can change the value of this variable, for both gdb and your program, using the path command. You can load unlinked object. o files into gdb using the file command. You will not be able to ldquorunrdquo an object file, but you can disassemble functions and inspect variables. Also, if the underlying BFD functionality supports it, you could use gdb - write to patch object files using this technique. Note that gdb can neither interpret nor modify relocations in this case, so branches and some initialized variables will appear to go to the wrong place. But this feature is still handy from time to time. file file with no argument makes gdb discard any information it has on both executable file and the symbol table. exec-file filename Specify that the program to be run (but not the symbol table) is found in filename. gdb searches the environment variable PATH if necessary to locate your program. Omitting filename means to discard information on the executable file. symbol-file filename Read symbol table information from file filename. PATH is searched when necessary. Use the file command to get both symbol table and program to run from the same file. symbol-file with no argument clears out gdb information on your programs symbol table. The symbol-file command causes gdb to forget the contents of some breakpoints and auto-display expressions. This is because they may contain pointers to the internal data recording symbols and data types, which are part of the old symbol table data being discarded inside gdb. symbol-file does not repeat if you press ltRETgt again after executing it once. When gdb is configured for a particular environment, it understands debugging information in whatever format is the standard generated for that environment you may use either a gnu compiler, or other compilers that adhere to the local conventions. Best results are usually obtained from gnu compilers for example, using gcc you can generate debugging information for optimized code. For most kinds of object files, with the exception of old SVR3 systems using COFF, the symbol-file command does not normally read the symbol table in full right away. Instead, it scans the symbol table quickly to find which source files and which symbols are present. The details are read later, one source file at a time, as they are needed. The purpose of this two-stage reading strategy is to make gdb start up faster. For the most part, it is invisible except for occasional pauses while the symbol table details for a particular source file are being read. (The set verbose command can turn these pauses into messages if desired. See Optional Warnings and Messages .) We have not implemented the two-stage strategy for COFF yet. When the symbol table is stored in COFF format, symbol-file reads the symbol table data in full right away. Note that ldquostabs-in-COFFrdquo still does the two-stage strategy, since the debug info is actually in stabs format. symbol-file - readnow filename file - readnow filename You can override the gdb two-stage strategy for reading symbol tables by using the lsquo - readnow rsquo option with any of the commands that load symbol table information, if you want to be sure gdb has the entire symbol table available. core-file filename core Specify the whereabouts of a core dump file to be used as the ldquocontents of memoryrdquo. Traditionally, core files contain only some parts of the address space of the process that generated them gdb can access the executable file itself for other parts. core-file with no argument specifies that no core file is to be used. Note that the core file is ignored when your program is actually running under gdb. So, if you have been running your program and you wish to debug a core file instead, you must kill the subprocess in which the program is running. To do this, use the kill command (see Killing the Child Process ). add-symbol-file filename address add-symbol-file filename address - readnow add-symbol-file filename address - s section address. The add-symbol-file command reads additional symbol table information from the file filename. You would use this command when filename has been dynamically loaded (by some other means) into the program that is running. The address should give the memory address at which the file has been loaded gdb cannot figure this out for itself. You can additionally specify an arbitrary number of lsquo - s section address rsquo pairs, to give an explicit section name and base address for that section. You can specify any address as an expression. The symbol table of the file filename is added to the symbol table originally read with the symbol-file command. You can use the add-symbol-file command any number of times the new symbol data thus read is kept in addition to the old. Changes can be reverted using the command remove-symbol-file. Although filename is typically a shared library file, an executable file, or some other object file which has been fully relocated for loading into a process, you can also load symbolic information from relocatable. o files, as long as: the files symbolic information refers only to linker symbols defined in that file, not to symbols defined by other object files, every section the files symbolic information refers to has actually been loaded into the inferior, as it appears in the file, and you can determine the address at which every section was loaded, and provide these to the add-symbol-file command. Some embedded operating systems, like Sun Chorus and VxWorks, can load relocatable files into an already running program such systems typically make the requirements above easy to meet. However, its important to recognize that many native systems use complex link procedures (.linkonce section factoring and C constructor table assembly, for example) that make the requirements difficult to meet. In general, one cannot assume that using add-symbol-file to read a relocatable object files symbolic information will have the same effect as linking the relocatable object file into the program in the normal way. add-symbol-file does not repeat if you press ltRETgt after using it. remove-symbol-file filename remove-symbol-file - a address Remove a symbol file added via the add-symbol-file command. The file to remove can be identified by its filename or by an address that lies within the boundaries of this symbol file in memory. Example: remove-symbol-file does not repeat if you press ltRETgt after using it. add-symbol-file-from-memory address Load symbols from the given address in a dynamically loaded object file whose image is mapped directly into the inferiors memory. For example, the Linux kernel maps a syscall DSO into each processs address space this DSO provides kernel-specific code for some system calls. The argument can be any expression whose evaluation yields the address of the files shared object file header. For this command to work, you must have used symbol-file or exec-file commands in advance. section section addr The section command changes the base address of the named section of the exec file to addr. This can be used if the exec file does not contain section addresses, (such as in the a. out format), or when the addresses specified in the file itself are wrong. Each section must be changed separately. The info files command, described below, lists all the sections and their addresses. info files info target info files and info target are synonymous both print the current target (see Specifying a Debugging Target ), including the names of the executable and core dump files currently in use by gdb. and the files from which symbols were loaded. The command help target lists all possible targets rather than current ones. maint info sections Another command that can give you extra information about program sections is maint info sections. In addition to the section information displayed by info files. this command displays the flags and file offset of each section in the executable and core dump files. In addition, maint info sections provides the following command options (which may be arbitrarily combined): ALLOBJ Display sections for all loaded object files, including shared libraries. sections Display info only for named sections. section-flags Display info only for sections for which section-flags are true. The section flags that gdb currently knows about are: ALLOC Section will have space allocated in the process when loaded. Set for all sections except those containing debug information. LOAD Section will be loaded from the file into the child process memory. Set for pre-initialized code and data, clear for. bss sections. RELOC Section needs to be relocated before loading. READONLY Section cannot be modified by the child process. CODE Section contains executable code only. DATA Section contains data only (no executable code). ROM Section will reside in ROM. CONSTRUCTOR Section contains data for constructordestructor lists. HASCONTENTS Section is not empty. NEVERLOAD An instruction to the linker to not output the section. COFFSHAREDLIBRARY A notification to the linker that the section contains COFF shared library information. ISCOMMON Section contains common symbols. set trust-readonly-sections on Tell gdb that readonly sections in your object file really are read-only (i. e. that their contents will not change). In that case, gdb can fetch values from these sections out of the object file, rather than from the target program. For some targets (notably embedded ones), this can be a significant enhancement to debugging performance. The default is off. set trust-readonly-sections off Tell gdb not to trust readonly sections. This means that the contents of the section might change while the program is running, and must therefore be fetched from the target when needed. show trust-readonly-sections Show the current setting of trusting readonly sections. All file-specifying commands allow both absolute and relative file names as arguments. gdb always converts the file name to an absolute file name and remembers it that way. gdb supports gnu Linux, MS-Windows, SunOS, DarwinMach-O, SVr4, IBM RS6000 AIX, QNX Neutrino, FDPIC (FR-V), and DSBT (TIC6X) shared libraries. On MS-Windows gdb must be linked with the Expat library to support shared libraries. See Expat. gdb automatically loads symbol definitions from shared libraries when you use the run command, or when you examine a core file. (Before you issue the run command, gdb does not understand references to a function in a shared library, howevermdashunless you are debugging a core file). There are times, however, when you may wish to not automatically load symbol definitions from shared libraries, such as when they are particularly large or there are many of them. To control the automatic loading of shared library symbols, use the commands: set auto-solib-add mode If mode is on. symbols from all shared object libraries will be loaded automatically when the inferior begins execution, you attach to an independently started inferior, or when the dynamic linker informs gdb that a new library has been loaded. If mode is off. symbols must be loaded manually, using the sharedlibrary command. The default value is on. If your program uses lots of shared libraries with debug info that takes large amounts of memory, you can decrease the gdb memory footprint by preventing it from automatically loading the symbols from shared libraries. To that end, type set auto-solib-add off before running the inferior, then load each library whose debug symbols you do need with sharedlibrary regexp. where regexp is a regular expression that matches the libraries whose symbols you want to be loaded. show auto-solib-add Display the current autoloading mode. To explicitly load shared library symbols, use the sharedlibrary command: info share regex info sharedlibrary regex Print the names of the shared libraries which are currently loaded that match regex. If regex is omitted then print all shared libraries that are loaded. info dll regex This is an alias of info sharedlibrary. sharedlibrary regex share regex Load shared object library symbols for files matching a Unix regular expression. As with files loaded automatically, it only loads shared libraries required by your program for a core file or after typing run. If regex is omitted all shared libraries required by your program are loaded. nosharedlibrary Unload all shared object library symbols. This discards all symbols that have been loaded from all shared libraries. Symbols from shared libraries that were loaded by explicit user requests are not discarded. Sometimes you may wish that gdb stops and gives you control when any of shared library events happen. The best way to do this is to use catch load and catch unload (see Set Catchpoints ). gdb also supports the the set stop-on-solib-events command for this. This command exists for historical reasons. It is less useful than setting a catchpoint, because it does not allow for conditions or commands as a catchpoint does. set stop-on-solib-events This command controls whether gdb should give you control when the dynamic linker notifies it about some shared library event. The most common event of interest is loading or unloading of a new shared library. show stop-on-solib-events Show whether gdb stops and gives you control when shared library events happen. Shared libraries are also supported in many cross or remote debugging configurations. gdb needs to have access to the targets libraries this can be accomplished either by providing copies of the libraries on the host system, or by asking gdb to automatically retrieve the libraries from the target. If copies of the target libraries are provided, they need to be the same as the target libraries, although the copies on the target can be stripped as long as the copies on the host are not. For remote debugging, you need to tell gdb where the target libraries are, so that it can load the correct copiesmdashotherwise, it may try to load the hosts libraries. gdb has two variables to specify the search directories for target libraries. set sysroot path Use path as the system root for the program being debugged. Any absolute shared library paths will be prefixed with path many runtime loaders store the absolute paths to the shared library in the target programs memory. When starting processes remotely, and when attaching to already-running processes (local or remote), their executable filenames will be prefixed with path if reported to gdb as absolute by the operating system. If you use set sysroot to find executables and shared libraries, they need to be laid out in the same way that they are on the target, with e. g. a bin. lib and usrlib hierarchy under path. If path starts with the sequence target: and the target system is remote then gdb will retrieve the target binaries from the remote system. This is only supported when using a remote target that supports the remote get command (see Sending files to a remote system ). The part of path following the initial target: (if present) is used as system root prefix on the remote file system. If path starts with the sequence remote: this is converted to the sequence target: by set sysroot 1. If you want to specify a local system root using a directory that happens to be named target: or remote. you need to use some equivalent variant of the name like. target. For targets with an MS-DOS based filesystem, such as MS-Windows and SymbianOS, gdb tries prefixing a few variants of the target absolute file name with path. But first, on Unix hosts, gdb converts all backslash directory separators into forward slashes, because the backslash is not a directory separator on Unix: Then, gdb attempts prefixing the target file name with path. and looks for the resulting file name in the host file system: If that does not find the binary, gdb tries removing the lsquo. rsquo character from the drive spec, both for convenience, and, for the case of the host file system not supporting file names with colons: This makes it possible to have a system root that mirrors a target with more than one drive. T. ex. you may want to setup your local copies of the target system shared libraries like so (note lsquo c rsquo vs lsquo z rsquo): and point the system root at pathtosysroot. so that gdb can find the correct copies of both c:sysbinfoo. dll. and z:sysbinbar. dll. If that still does not find the binary, gdb tries removing the whole drive spec from the target file name: This last lookup makes it possible to not care about the drive name, if you dont want or need to. The set solib-absolute-prefix command is an alias for set sysroot. You can set the default system root by using the configure-time lsquo --with-sysroot rsquo option. If the system root is inside gdb s configured binary prefix (set with lsquo --prefix rsquo or lsquo --exec-prefix rsquo), then the default system root will be updated automatically if the installed gdb is moved to a new location. show sysroot Display the current executable and shared library prefix. set solib-search-path path If this variable is set, path is a colon-separated list of directories to search for shared libraries. lsquo solib-search-path rsquo is used after lsquo sysroot rsquo fails to locate the library, or if the path to the library is relative instead of absolute. If you want to use lsquo solib-search-path rsquo instead of lsquo sysroot rsquo, be sure to set lsquo sysroot rsquo to a nonexistent directory to prevent gdb from finding your hosts libraries. lsquo sysroot rsquo is preferred setting it to a nonexistent directory may interfere with automatic loading of shared library symbols. show solib-search-path Display the current shared library search path. set target-file-system-kind kind Set assumed file system kind for target reported file names. Shared library file names as reported by the target system may not make sense as is on the system gdb is running on. For example, when remote debugging a target that has MS-DOS based file system semantics, from a Unix host, the target may be reporting to gdb a list of loaded shared libraries with file names such as c:Windowskernel32.dll. On Unix hosts, theres no concept of drive letters, so the lsquo c: rsquo prefix is not normally understood as indicating an absolute file name, and neither is the backslash normally considered a directory separator character. In that case, the native file system would interpret this whole absolute file name as a relative file name with no directory components. This would make it impossible to point gdb at a copy of the remote targets shared libraries on the host using set sysroot. and impractical with set solib-search-path. Setting target-file-system-kind to dos-based tells gdb to interpret such file names similarly to how the target would, and to map them to file names valid on gdb s native file system semantics. The value of kind can be auto. in addition to one of the supported file system kinds. In that case, gdb tries to determine the appropriate file system variant based on the current targets operating system (see Configuring the Current ABI ). The supported file system settings are: unix Instruct gdb to assume the target file system is of Unix kind. Only file names starting the forward slash (lsquo rsquo) character are considered absolute, and the directory separator character is also the forward slash. dos-based Instruct gdb to assume the target file system is DOS based. File names starting with either a forward slash, or a drive letter followed by a colon (e. g. lsquo c: rsquo), are considered absolute, and both the slash (lsquo rsquo) and the backslash (lsquo rsquo) characters are considered directory separators. auto Instruct gdb to use the file system kind associated with the target operating system (see Configuring the Current ABI ). Detta är standardvärdet. When processing file names provided by the user, gdb frequently needs to compare them to the file names recorded in the programs debug info. Normally, gdb compares just the base names of the files as strings, which is reasonably fast even for very large programs. (The base name of a file is the last portion of its name, after stripping all the leading directories.) This shortcut in comparison is based upon the assumption that files cannot have more than one base name. This is usually true, but references to files that use symlinks or similar filesystem facilities violate that assumption. If your program records files using such facilities, or if you provide file names to gdb using symlinks etc. you can set basenames-may-differ to true to instruct gdb to completely canonicalize each pair of file names it needs to compare. This will make file-name comparisons accurate, but at a price of a significant slowdown. set basenames-may-differ Set whether a source file may have multiple base names. show basenames-may-differ Show whether a source file may have multiple base names. 1 Historically the functionality to retrieve binaries from the remote system was provided by prefixing path with remote:GNU GDB Debugger Command Cheat Sheet Compile with the - g option (for most GNU and Intel compilers) which generates added information in the object code so the debugger can match a line of source code with the step of execution. Använd inte kompilatoroptimeringsdirektivet som - O eller - O2 som omarrangerar datoperationerna för att få fart eftersom den här ombokningen inte matchar utförandeplanen i källkoden och det kan vara omöjligt att följa. controlc: Sluta körningen. Det kan stoppa programmet var som helst, i din källa eller ett C-bibliotek eller någonstans. För att utföra ett kommandokontroll: Kommandot eller kommandot kommandot GDB-kommando slutfört: Använd TAB-tangentinfo-brytningen TAB ska slutföra kommandot som resulterar i informationsbrytningspunkter Tryck på TAB två gånger för att se alla tillgängliga alternativ om mer än ett alternativ är tillgängligt eller skriv M-RETURN. GDB-kommandoförkortning: info bre RETURN fungerar som bre är en giltig avbrytning för brytpunkter De-referens STL-behållare: Visar STL-behållarklasser med hjälp av GDB p-variabelnamnet resulterar i en kryptisk visning av malldefinitioner och pekare. Använd följande. gdbinit-fil (V1.03 091508). Nu arbetar med GDB 4.3. (Arkiverade versioner: Endast V1.01 GDB 6.4) Tack vare Dr. Eng. Dan C. Marinescu för tillstånd att skicka detta skript. Use the following commands provided by the script:

Comments