Hoe gebruik ek gcc, g, en GDB Die C samesteller op ENIAC is gcc. Die C-eweknie is g. Om 'n C of C program saam te stel: gcc file. c of g file. c Dit stel file. c in 'n uitvoerbare binêre a. out vernoem. Hier is 'n paar opsies om gcc en g: - o outputfile Om die naam van die uitvoer lêer spesifiseer. Die uitvoerbare sal genoem a. out, tensy jy hierdie opsie gebruik. G Om saam te stel met ontfouting vlae, vir gebruik met GDB. - L Rig dopgehou spesifiseer vir die linkerkant om te soek na die biblioteek lêers. l biblioteek Dit spesifiseer 'n biblioteek om te skakel met. - Ek Rig Dit spesifiseer 'n dopgehou vir die saamstel om te soek na wanneer jy soek na sluit lêers. Die debugger is gdb. Hier is 'n tipiese voorbeeld van 'n gcc / gdb sessie: Hier is 'n paar gdb opdragte: hulp sal julle help om op die meeste gdb funksies. As jy wil om te help op 'n spesifieke instruksies tik hulp opdrag. b funksie-naam aan 'n breekpunt te stel tydens 'n funksie. r args Om die program uit te voer. Dit sal loop totdat dit 'n breekpunt bereik. s Om enkel-stap deur reëls van die kode. c Om voort te gaan totdat die volgende breekpunt. p veranderlike Om 'n veranderlikes waarde te druk. q Om gdb ophou. kopie Computing en Opvoedkundige Tegnologie Dienste Report a ProblemSome generiese hulp: gdb begin GDB, met geen ontfouting les gdb program begin debugging program gdb program kern debug een core dump kern wat deur die program gdb help uit te voer beskryf command line opsies 1- In die eerste plek vind in die gids voldoende waar die corefile gegenereer. 2- Gebruik dan LS - ltr opdrag in die gids voldoende om die nuutste gegenereer corefile vind. 3- Om die corefile gebruik GDB binêre pad van corefile Dit die corefile sal laai laai. 4- Dan kan jy die inligting met behulp van BT opdrag kry. Vir gedetailleerde gebruik terugsoektog BT vol. 5- tot druk die veranderlikes gebruik gedrukte varibale-naam of p varibale-naam 6- Om enige hulp oor gdb gebruik hulp opsie te kry of gebruik propos soek-onderwerp 7- Gebruik raam raam-nommer om te gaan na die gewenste raam nommer. 8- Gebruik up N en af N beveel om raam N rame up kies en kies raam N rame onderskeidelik af. 9- Om te stop gdb gebruik ophou of Q. GNU GDB Debugger Command Cheat Sheet Stel met die G-opsie (vir die meeste GNU en Intel opstellers) wat bygevoeg inligting genereer in die voorwerp kode so die debugger 'n lyn van die bronkode met die kan pas stap van die uitvoering. Moenie samesteller optimalisering richtlijn soos - O of - O2 wat herrangskik berekening bedrywighede om spoed te kry, want dit herschikking sal nie ooreen met die volgorde van uitvoering in die bronkode en dit kan onmoontlik wees om te volg. controlc: Stop uitvoering. Dit kan enige plek stop program, in jou bron of 'n C biblioteek of op enige plek. Om 'n dop opdrag uit te voer: opdrag of dop opdrag GDB opdrag voltooiing: Gebruik TAB sleutel inligting BRE TAB sal die opdrag wat lei tot inligting te voltooi inspeksiepunte Press TAB twee keer om alle beskikbare opsies te sien of daar meer as een opsie is beskikbaar of tik M terug te keer. GDB opdrag afkorting: info BRE RETURN sal werk as BRE is 'n geldige afkorting vir inspeksiepunte De-Verwysingstegnieke STL Houers: Wys STL houer klasse met behulp van die GDB p veranderlike-naam resultate in 'n kriptiese vertoning van sjabloon definisies en wenke. Gebruik die volgende /. gdbinit lêer (v1.03 09/15/08). Nou werk met GDB 4.3. (Archived weergawes: v1.01 GDB 6.4 net) Danksy Dr. Eng. Dan C. Marinescu vir toestemming om hierdie skrif te plaas. Gebruik die volgende opdragte wat deur die script: 18.1 instruksies om lêers spesifiseer Wil jy dalk uitvoerbare en stort lêername spesifiseer. Die gewone manier om dit te doen, is om te begin-up tyd, met behulp van die argumente om gdb ons begin-up instruksies (sien Aan binne en buite GDB). Soms is dit nodig om te verander na 'n ander lêer tydens 'n gdb sessie. Of jy kan gdb hardloop en vergeet om 'n lêer wat jy wil gebruik spesifiseer. Of jy debugging n afgeleë teiken via gdbserver (kyk). In sulke situasies beveel die gdb te spesifiseer nuwe lêers is nuttig. lêer lêernaam Gebruik lêernaam as die program te ontfout. Dit is gelees vir sy simbole en vir die inhoud van suiwer geheue. Dit is ook die program uitgevoer word wanneer jy die Harloop Opdrag gebruik. As jy nie 'n gids spesifiseer en die lêer is nie gevind in die gdb werk gids, gdb gebruik van die omgewingveranderlike PATH as 'n lys van gidse te soek, net soos die dop doen wanneer jy soek na 'n program uit te voer. Jy kan die waarde van hierdie veranderlike verander, vir beide GDB en jou program, met behulp van die opdrag pad. Jy kan lêers ontkoppel voorwerp. o in gdb laai met behulp van die lêer opdrag. Jy sal nie in staat wees om 'n voorwerp lêer ldquorunrdquo, maar jy kan funksies te onderwerp aan en inspekteer veranderlikes. Ook, as die onderliggende BFD funksie ondersteun, kan jy gebruik GDB - write om voorwerp lêers met behulp van hierdie tegniek probeer herstel. Let daarop dat gdb kan nie interpreteer nie verskuiwings in hierdie geval verander, sodat takke en 'n paar geïnitialiseerd veranderlikes sal verskyn om te gaan na die verkeerde plek. Maar hierdie funksie is nog handig te pas kom van tyd tot tyd. Lêer met geen argument maak gdb weggooi enige inligting wat dit op beide uitvoerbare lêer en die simbool tafel. exec-lêer lêernaam spesifiseer dat die program uit te voer (maar nie die simbool tabel) is gevind in lêernaam. GDB soek die omgewingveranderlike PATH indien nodig om jou program te spoor. Weglating lêernaam beteken om inligting oor die uitvoerbare lêer te verwyder. simbool-lêer lêernaam Lees simbool tafel inligting van lêer lêernaam. Pad word wanneer dit nodig is deursoek. Gebruik die lêer opdrag om beide simbool tafel en program te kry om te hardloop uit dieselfde lêer. simbool-lêer met geen argument goedkeuring uit gdb inligting oor jou programme simbool tafel. Die simbool-lêer opdrag oorsake GDB om die inhoud van 'n paar inspeksiepunte en motor-vertoning uitdrukkings vergeet. Dit is omdat hulle verwysings na die interne data opname simbole en tipes data, wat deel vorm van die ou simbool tafel data word weggegooi in gdb is kan bevat. simbool-lêer nie herhaal as jy ltRETgt druk weer na een keer uitvoering daarvan. Wanneer GDB is ingestel vir 'n bepaalde omgewing, verstaan dit ontfouting inligting in watter formaat is die standaard gegenereer vir daardie omgewing wat jy kan gebruik óf 'n GNU samesteller, of ander opstellers wat voldoen aan die plaaslike konvensies. Die beste resultate word gewoonlik verkry vanaf GNU opstellers byvoorbeeld met behulp van gcc jy kan debugging inligting vir optimale kode te genereer. Vir die meeste soorte voorwerp lêers, met die uitsondering van ou SVR3 stelsels met behulp van COFF, beteken die simbool-lêer bevel nie normaalweg lees die simbool tafel in volle dadelik. In plaas daarvan, dit skanderings die simbool tafel vinnig om uit te vind watter bron lêers en wat simbole teenwoordig is. Die besonderhede word gelees later, een bron lêer op 'n tyd, as dit nodig is. Die doel van hierdie twee-stadium leesstrategie is om gdb begin vinniger. Vir die grootste deel, dit is onsigbaar, behalwe vir Sosiale pouses terwyl die simbool tafel besonderhede vir 'n spesifieke bron lêer word gelees. (Die opstel verbose opdrag kan hierdie pouses draai in boodskappe as jy wil. Kyk Opsionele Waarskuwings en boodskappe.) Ons het die twee-stadium strategie vir COFF nog nie geïmplementeer word. Wanneer die simbool tafel is gestoor in COFF formaat, simbool-lêer lees die simbool tafel data ten volle dadelik. Let daarop dat ldquostabs-in-COFFrdquo doen steeds die twee-stadium strategie, aangesien die ontfoutinligting is eintlik in steek formaat. simbool-lêer - readnow lêernaam lêer - readnow lêernaam Jy kan die gdb twee-stadium strategie oorheers vir lees simbool tafels met behulp van die rsquo opsie stuur sodoende - readnow met enige van die opdragte wat vrag simbool tafel inligting, as jy wil om seker te wees GDB het die hele simbool tafel beskikbaar. kern-lêer lêernaam kern Spesifiseer die doen en late van 'n stort lêer te gebruik as die ldquocontents van memoryrdquo. Tradisioneel kern lêers bevat slegs 'n paar dele van die adres spasie van die proses wat gegenereer hulle GDB kan toegang tot die uitvoerbare lêer self vir ander dele. kern-lêer met geen argument bepaal dat geen kern lêer is om gebruik te word. Let daarop dat die kern lêer word geïgnoreer wanneer jou program eintlik loop onder gdb. Dus, as jy jou program loop en jy wil 'n kern lêer ontfout plaas, jy moet die subprocess waarin die program loop dood te maak. Om dit te doen, gebruik die doodmaak opdrag (sien Killing die kind Proses). add-simbool-lêer lêernaam adres add-simbool-lêer lêernaam adres - readnow add-simbool-lêer lêernaam adres - s artikel adres. Die byvoeging simbool-lêer opdrag lui bykomende simbool tafel inligting van die lêer lêernaam. Jy sal hierdie opdrag wanneer lêernaam het dinamiese gelaai (deur 'n ander manier) gebruik in die program wat sal plaasvind. Die adres moet die geheue adres waar die lêer is gelaai gdb kan dit nie uitwerk vir homself gee. Jy kan 'n arbitrêre aantal stuur sodoende - s artikel adres rsquo pare Daarbenewens spesifiseer, 'n eksplisiete artikel naam en base adres vir daardie artikel gee. Jy kan enige adres as 'n uitdrukking te gee. Die simbool tafel van die lêer lêernaam is bygevoeg na die simbool tafel oorspronklik gelees met die opdrag simbool-lêer. Jy kan dié byvoeging simbool-lêer bevel enige aantal kere wat die nuwe simbool data dus lees is bykomend tot die ou gehou gebruik. Wysigings kan teruggekeer met behulp van die opdrag verwyder-simbool-lêer. Hoewel lêernaam is tipies 'n gedeelde biblioteek lêer, 'n uitvoerbare lêer, of 'n ander voorwerp lêer wat ten volle het verskuif na die laai van 'n proses, kan jy ook simboliese inligting te laai van skuif aanvaarde. o lêers, solank: die lêers simboliese inligting verwys net linkerkant simbole soos in daardie lêer, nie om simbole gedefinieer deur ander voorwerp lêers, elke artikel die lêers simboliese inligting verwys na het eintlik is gelaai in die minderwaardige, soos dit in die lêer, en jy kan die adres te bepaal waarteen elke artikel gelaai, en bied dit aan die opdrag byvoeging simbool-lêer. Sommige ingebedde bedryfstelsels, soos Sun Koor en VxWorks, kan skuif aanvaarde lêers te laai na 'n reeds aan die gang program sulke stelsels tipies maak die vereistes hierbo maklik om te ontmoet. Maar dit is belangrik om te erken dat baie inheemse stelsels gebruik komplekse skakel prosedures (.linkonce artikel factoring en C konstruktor tafel vergadering, byvoorbeeld) wat die vereistes moeilik om te voldoen maak. In die algemeen, kan 'n mens nie aanvaar dat die gebruik van add-simbool-lêer na 'n skuif aanvaarde voorwerp lees lêers simboliese inligting sal dieselfde uitwerking as die koppeling van die skuif aanvaarde voorwerp lêer in die program in die normale manier het. add-simbool-lêer nie herhaal as jy druk ltRETgt nadat jy dit gebruik. verwyder-simbool-lêer lêernaam verwyder-simbool-lêer - a adres Verwyder 'n simbool lêer bygevoeg via die command byvoeging simbool-lêer. Die lêer te verwyder kan word deur sy lêernaam of deur 'n adres wat binne die grense van hierdie simbool lêer in die geheue lê. Voorbeeld: verwyder-simbool-lêer nie herhaal as jy druk ltRETgt nadat jy dit gebruik. add-simbool-lêer-uit-geheue adres load simbole uit die gegewe adres in 'n dinamiese gelaai voorwerp lêer wie se beeld is direk gekarteer in die minderes geheue. Byvoorbeeld, die Linux-kern kaarte 'n syscall DSO in elke processs adresruimte hierdie DSO bied kern-spesifieke kode vir 'n paar stelsel oproepe. Die argument kan 'n uitdrukking waarvan die evaluering van die adres van die lêers gedeel lêer voorwerp kop oplewer nie. Om hierdie opdrag te werk, moet jy teken-lêer of exec-lêer opdragte gebruik vooruit. artikel artikel addr Die artikel opdrag verander die basis-posadres van die naam van afdeling van die exec lêer te addr. Dit kan gebruik word as die exec lêer nie deel adresse, (soos in die a. out formaat) bevat, of wanneer die adresse vermeld in die lêer self is verkeerd. Elke afdeling moet afsonderlik verander. Die opdrag info lêers, wat hieronder beskryf word, n lys van al die afdelings en hul adresse. info lêers info target inligting lêers en inligting teiken is sinoniem beide druk die huidige teiken (sien spesifiseer van 'n Ontfouting Target), insluitend die name van die uitvoerbare en kern dump lêers wat tans in gebruik deur gdb. en die lêers waaruit simbole gelaai. Die opdrag help teiken lys alle moontlike teikens eerder as huidige kinders. maint inligting afdelings Nog bevel dat jy ekstra inligting kan gee oor program afdelings is maint inligting afdelings. Benewens die artikel inligting vertoon deur info lêers. hierdie opdrag gee die vlae en lêer geneutraliseer van elke afdeling in die uitvoerbare en kern dump lêers. Daarbenewens maint inligting afdelings bied die volgende opdrag opsies (wat na willekeur kan gekombineer word): ALLOBJ Wys artikels vir al gelaai voorwerp lêers, insluitend gedeelde biblioteke. artikels Wys info net vir die naam van artikels. artikel-vlae op inligting net vir afdelings waarvoor artikel-vlae is waar. Die artikel vlae wat gdb tans weet is: alloc Afdeling sal ruimte in die proses toegeken wanneer gelaai. Stel vir alle afdelings behalwe dié wat debug inligting. LOAD Afdeling sal gelaai word uit die lêer in die kind proses geheue. Stel vir pre-geïnisialiseer kode en data, duidelik vir. bss afdelings. RELOC afdeling moet verskuif voordat die laai. Slegs-lees artikel kan nie verander word deur die kind proses. KODE afdeling bevat slegs uitvoerbare kode. DATA afdeling bevat inligting net (geen uitvoerbare kode). ROM Afdeling sal woon in Rom. BOUWBEDRIJF afdeling bevat inligting vir konstruktor / destructor lyste. HASCONTENTS Afdeling is nie leeg. NEVERLOAD 'n opdrag om die linkerkant om uitset nie die artikel. COFFSHAREDLIBRARY n kennisgewing aan die linkerkant wat die artikel bevat COFF gedeelde biblioteek inligting. ISCOMMON afdeling bevat algemene simbole. stel trust-leesalleen-afdelings op Tell gdb dat artikels Read Only in jou voorwerp lêer regtig lees net (dit wil sê dat die inhoud daarvan sal nie verander nie). In daardie geval, kan gdb waardes van hierdie afdelings uit die voorwerp lêer, eerder as om uit die teiken program haal. Vir sommige teikens (veral ingebed kinders), kan dit 'n beduidende verbetering op die opsporing van prestasie wees. Die verstek is af. stel trust-leesalleen-afdelings af Vertel GDB leesalleen afdelings nie te vertrou. Dit beteken dat die inhoud van die artikel kan verander terwyl die program loop, en moet dus haal uit die teiken wanneer dit nodig is. Wys trust-leesalleen-afdelings Wys die huidige omgewing van vertroue leesalleen afdelings. All-lêer spesifiseer opdragte toelaat dat beide absolute en relatiewe lêername as argumente. GDB vat altyd die lêernaam om 'n absolute lêernaam en onthou dit so. GDB ondersteun GNU / Linux, MS-Windows, SunOS, Darwin / Mach-O, SVr4, IBM RS / 6000 AIX, QNX Neutrino, FDPIC (FR-V), en DSBT (TIC6X) gedeel biblioteke. Op MS-Windows gdb moet gekoppel word met die Expat biblioteek om gedeelde biblioteke ondersteun. Sien Expat. GDB laai outomaties simbool definisies van gedeel biblioteke wanneer jy die Harloop Opdrag gebruik, of wanneer jy 'n kern lêer te ondersoek. (Voordat jy die Harloop Opdrag uit te reik, gdb nie verwysings na 'n funksie in 'n gedeelde biblioteek verstaan, howevermdashunless jy debugging n kern lêer). Daar is egter tye wanneer jy kan wens om nie outomaties laai simbool definisies van gedeel biblioteke, soos wanneer hulle besonder groot of daar is baie van hulle. Om die outomatiese laai van gedeelde biblioteek simbole te beheer, gebruik die gebooie: stel outomaties solib-voeg modus As modus is op. simbole van al gedeel voorwerp biblioteke sal outomaties gelaai wanneer die minderwaardige begin uitvoering, jy heg aan 'n onafhanklik begin minderwaardig, of wanneer die dinamiese linkerkant gdb mee dat 'n nuwe biblioteek is gelaai. As modus is af. simbole moet met die hand gelaai, met behulp van die sharedlibrary opdrag. Die standaard waarde is. As jou program maak gebruik van baie van gedeelde biblioteke met ontfoutinligting dat groot hoeveelhede geheue neem, kan jy die gdb geheue voetspoor te verminder deur te verhoed dat dit outomaties laai van die simbole van gedeel biblioteke. Aan die einde het soort stel outomaties solib-voeg af voordat jy die minderwaardige, dan laai elke biblioteek wie se debug simbole wat jy hoef met sharedlibrary regexp. waar regexp is 'n gewone uitdrukking wat ooreenstem met die biblioteke wie se simbole wat jy wil laai. wys outomaties solib-voeg Vertoon die huidige autoloading af. Uitdruklik laai gedeelde biblioteek simbole, gebruik die sharedlibrary opdrag: info share regex inligting sharedlibrary regex Druk die name van die gedeelde biblioteke wat tans gelaai daardie wedstryd regex. As regex weggelaat dan druk al gedeel biblioteke wat gelaai. info DLL regex Dit is 'n alias van inligting sharedlibrary. sharedlibrary regex aandeel regex op load gedeel objekbiblioteek simbole vir lêers wat ooreenstem met 'n Unix gewone uitdrukking. Soos met lêers outomaties gelaai, dit net baie gedeel biblioteke vereis deur jou program vir 'n kern lêer of na tik lopie. As regex weggelaat al gedeel biblioteke vereis deur jou program is gelaai. nosharedlibrary Laai al gedeel objekbiblioteek simbole. Dit ignoreer al die simbole wat uit alle gedeel biblioteke gelaai. Simbole van gedeel biblioteke wat deur eksplisiete gebruiker versoeke gelaai word nie weggegooi. Soms moet jy kan wens dat gdb stop en gee jou beheer wanneer enige van gedeelde biblioteek gebeure gebeur. Die beste manier om dit te doen is om te vang vrag en vang Converteer gebruik (sien Stel Catchpoints). GDB ondersteun ook die die set stop-on-solib-gebeure beveel hiervoor. Hierdie opdrag bestaan vir historiese redes. Dit is minder bruikbaar as die opstel van 'n catchpoint, want dit is nie geskik vir toestande of opdragte as 'n catchpoint doen. stel stop-on-solib-gebeure Hierdie opdrag kontroles hetsy gdb moet gee jou beheer wanneer die dinamiese linkerkant kennis dit oor 'n paar gedeelde biblioteek geval. Die mees algemene geval van belang is of aflaai van 'n nuwe gedeelde biblioteek. wys stop-on-solib-gebeure Wys of gdb stop en gee jou beheer wanneer gedeelde biblioteek gebeure gebeur. Gedeelde biblioteke word ook ondersteun in baie kruis of afgeleë debugging konfigurasies. GDB moet toegang tot die teikens biblioteke hierdie bereik kan word óf deur die verskaffing van afskrifte van die biblioteke op die gasheer stelsel het, of deur te vra GDB om outomaties te haal die biblioteke van die teiken. Indien eksemplare van die teiken biblioteke voorsien, wat hulle nodig het om dieselfde as die teiken biblioteke wees, hoewel die afskrifte op die teiken so lank as wat die afskrifte van die gasheer is nie kan gestroop word. Vir afgeleë debugging, moet jy gdb vertel waar die teiken biblioteke is, sodat dit die korrekte copiesmdashotherwise kan laai, kan dit probeer om die gashere biblioteke laai. GDB het twee veranderlikes om die soektog dopgehou vir teiken biblioteke spesifiseer. stel sysroot pad Gebruik pad as die stelsel wortel vir die program word ontfout. Enige absolute gedeelde biblioteek paaie sal wees voorvoegsel met pad baie runtime loaders slaan die absolute paaie na die gedeelde biblioteek in die teiken programme geheue. Wanneer afstand begin prosesse, en wanneer verbonde aan al-lopende prosesse (plaaslike of afgeleë), sal hul uitvoerbare lêername word voorafgegaan deur pad as gerapporteer as absolute deur die bedryfstelsel om GDB. As jy stel sysroot gebruik om executables en gedeelde biblioteke vind, wat hulle nodig het in die dieselfde manier word gelê dat hulle op die teiken, met bv n / bin. / Lib en / usr / lib hiërargie onder pad. As pad begin met die volgorde teiken, en die teiken stelsel is afgeleë dan sal gdb die teiken binaries van die afgeleë stelsel te haal. Dit word alleen ondersteun wanneer die gebruik van 'n afgeleë teiken wat die opdrag afgeleë get ondersteun (sien lêers stuur na 'n afgeleë stelsel). Die deel van die pad na die aanvanklike teiken: (indien teenwoordig) word gebruik as stelsel wortel voorvoegsel op die afgeleë lêer stelsel. As pad begin met die volgorde afgeleë: dit omgeskakel word na die volgorde teiken: deur stel sysroot 1. As jy 'n plaaslike stelsel wortel spesifiseer met behulp van 'n gids wat gebeur om anoniem te bly teiken: of afgeleë. wat jy nodig het om 'n paar ekwivalent variant van die naam soos ./target gebruik. Vir teikens met 'n MS-DOS-gebaseerde lêerstelsel, soos MS-Windows en SymbianOS, gdb drieë voorvoegsel 'n paar variasies van die teiken absolute lêernaam met pad. Maar eers op Unix gasheer, gdb vat al agteroorskuinsstreep gids skeiding in vorentoe houe, want die agteroorskuinsstreep is nie 'n gids skeiding op Unix: Dan gdb pogings voorvoegsel die naam teiken lêer met pad. en kyk vir die gevolglike lêernaam in die gasheer lêerstelsel: As dit nie die binêre vind, gdb probeer die verwydering van die waarde vir '. rsquo karakter van die stasie spec, beide vir gerief, en, vir die geval van die gasheer lêerstelsel nie ondersteun lêer name met dubbelpunte: Dit maak dit moontlik om 'n stelsel wortel wat 'n teiken spieëls met meer as een ry het. Bv wil jy dalk die opstel van jou plaaslike kopieë van die teiken stelsel gedeel biblioteke soos so (let stuur sodoende c rsquo vs stuur sodoende Z rsquo): en wys die stelsel wortel by / pad / na / sysroot. sodat gdb die korrekte afskrifte van beide c kan vind: sysbinfoo. dll. en Z: sysbinbar. dll. As dit nog steeds nie die binêre vind, gdb probeer die verwydering van die hele ry spec van die naam teiken lêer: Hierdie laaste lookup maak dit moontlik om nie omgee vir die naam ry, as jy dit nie wil hê of nodig het om. Die stel solib-absolute-voorvoegsel opdrag is 'n alias vir stel sysroot. Jy kan die standaard stelsel wortel gestel deur die gebruik van die waarde vir 'with-sysroot rsquo opsie instel-time. As die stelsel wortel in gdb s ingestel binêre voorvoegsel (stel met waarde vir 'prefix rsquo of stuur sodoende --exec-voorvoegsel rsquo), dan sal die verstek stelsel wortel outomaties opgedateer word as die geïnstalleerde GDB is verskuif na 'n nuwe plek. wys sysroot Vertoon die huidige uitvoerbare en gedeelde biblioteek voorvoegsel. stel solib-soek-pad pad As hierdie veranderlike is ingestel, pad is 'n kolon geskeide lys van gidse te soek na gedeel biblioteke. stuur sodoende solib-soek-pad rsquo gebruik na stuur sodoende sysroot rsquo versuim om die biblioteek op te spoor, of as die pad na die biblioteek is relatief in plaas van absolute. As jy wil stuur sodoende solib-soek-pad rsquo in plaas van waarde vir 'sysroot rsquo gebruik, maak seker dat jy waarde vir' sysroot rsquo stel om 'n nie-bestaande gids om te verhoed dat gdb van die vind van jou gashere biblioteke. stuur sodoende sysroot rsquo is verkies opstel dat dit 'n nie-bestaande gids kan inmeng met outomatiese laai van gedeelde biblioteek simbole. Wys solib-soek-pad Vertoon die huidige gedeelde biblioteek soekpad. teiken-lêer-stelsel-soort soort Stel aanvaar lêerstelsel soort vir teiken berig lêername. Gedeelde biblioteek lêer name soos gerapporteer deur die teiken stelsel kan sin maak nie soos op die stelsel gdb loop op. Byvoorbeeld, wanneer afgeleë debugging 'n teiken wat MS-DOS gebaseerde lêer stelsel semantiek, uit 'n Unix gasheer het, die teiken kan verslag doen aan 'n lys van gelaaide gedeel biblioteke met lêername soos c GDB: Windowskernel32.dll. Op Unix gasheer, Theres geen konsep van ry letters, sodat die waarde vir 'c: rsquo voorvoegsel is nie normaalweg verstaan word as 'n aanduiding n absolute lêernaam, en nie die agteroorskuinsstreep gewoonlik beskou as 'n gids separator karakter. In daardie geval, sal die inheemse lêer stelsel die hele absolute lêernaam interpreteer as 'n relatiewe lêernaam sonder gids komponente. Dit sou dit onmoontlik maak om gdb wys op 'n afskrif van die afgeleë doelwitte gedeel biblioteke op die gasheer met behulp stel sysroot. en onprakties met stel solib-soek-pad. Die opstel van teiken-lêer-stelsel-soort dos-gebaseerde vertel GDB om sulke lêername soortgelyke interpreteer hoe die teiken sou, en om hulle te karteer om name geldig op gdb se moedertaal lêerstelsel semantiek te dien. Die waarde van aard kan wees motor. bykomend tot een van die ondersteunde lêer stelsel soorte. In daardie geval, gdb probeer om die gepaste lêer stelsel variant gebaseer op die huidige teikens bedryfstelsel te bepaal (sien die huidige ABI instel). Die ondersteun lêer stelsel instellings is: unix Gee opdrag GDB om te aanvaar die teiken lêerstelsel is van Unix soort. Slegs lêer name wat begin die slash (stuur sodoende / rsquo) karakter is absolute beskou, en die gids separator karakter is ook die slash. dos-gebaseerde Gee opdrag GDB om die teiken lêerstelsel aanvaar word DOS gebaseer. Lêer name wat begin met óf 'n slash, of 'n drive letter gevolg deur 'n dubbelpunt (bv stuur sodoende c: rsquo), is absolute beskou, en beide die streep (stuur sodoende / rsquo) en die agteroorskuinsstreep (stuur sodoende rsquo) karakters word beskou as gids skeiding . motor Gee opdrag gdb die lêerstelsel soort wat verband hou met die teiken bedryfstelsel gebruik (sien die huidige ABI instel). Dit is die standaard. Wanneer die verwerking van lêername wat deur die gebruiker, gdb moet gereeld vir hulle te vergelyk met die lêername aangeteken in die programme ontfoutinligting. Normaalweg gdb vergelyk net die basis name van die lêers as snare, wat is redelik vinnig, selfs vir baie groot programme. (Die basis naam van 'n lêer is die laaste gedeelte van sy naam, na stroping al die voorste dopgehou.) Dit kortpad in vergelyking is gebaseer op die aanname dat lêers meer as een basis naam nie kan hê. Dit is gewoonlik waar, maar verwysings na lêers wat symlinks of soortgelyke lêerstelsel fasiliteite gebruik in stryd met hierdie aanname. As jou program rekords lêers met behulp van sulke fasiliteite, of as jy 'n lêer name om GDB behulp symlinks ens jy kan stel basenames-mag-verskil aan getrou aan gdb opdrag te gee om elke paar lêername wat dit nodig het om te vergelyk heeltemal canonicalize. Dit sal lêernaam vergelykings akkuraat te maak, maar teen 'n prys van 'n beduidende verlangsaming. stel basenames-mag-verskil te stel of 'n bron lêer veelvuldige basis name kan hê. Wys basenames-mag-verskil aan te dui of 'n bron lêer veelvuldige basis name kan hê. Voetnote 1 histories die funksie om binaries van die afgeleë stelsel is verskaf deur voorvoegsel pad met afgeleë haal: 8. Ondersoek van data Die gewone manier om data in jou program ondersoek is met die druk bevel (afgekort p), of sy sinoniem inspekteer. Dit evalueer en die waarde van 'n uitdrukking van die taal van jou program is geskryf in (sien afdeling Gebruik GDB met verskillende tale,) druk. Druk Expr Print / f Expr Expr is 'n uitdrukking (in die brontaal). By verstek die waarde van Expr gedruk in 'n formaat wat geskik is vir sy data intik kan jy 'n ander formaat deur die spesifiseer van / f kies. waar f 'n brief waarin die formaat te sien uitvoer formate. Print Print / f As jy laat Expr. GDB vertoon die laaste waarde weer (van die waarde geskiedenis te sien artikel Waarde geskiedenis). Dit laat jou toe om maklik te inspekteer dieselfde waarde in 'n alternatiewe formaat. 'N meer lae-vlak manier van ondersoek data is met die x opdrag. Dit ondersoek data in die geheue op 'n bepaalde adres en druk dit in 'n bepaalde formaat. Sien artikel Ondersoek geheue. As jy belangstel in inligting oor tipes, of oor hoe die velde van 'n struct of 'n klas verklaar is, gebruik die PType exp opdrag eerder as die gedrukte media. Sien artikel Ondersoek na die simbool Table. 8.1 Uitdrukkings druk en baie ander GDB opdragte te aanvaar 'n uitdrukking en bereken die waarde daarvan. Enige soort konstante, veranderlike of operateur gedefinieer deur die programmeringstaal wat jy gebruik is geldig in 'n uitdrukking in GDB. Dit sluit voorwaardelike uitdrukking, funksie oproepe, gooi en string konstantes. Dit maak ongelukkig nie sluit simbole gedefinieer deur voorverwerker definieer bevele. GDB ondersteun verskeidenheid konstantes in uitdrukkings insette deur die gebruiker. Die sintaksis is. . Byvoorbeeld, kan jy die opdrag Druk gebruik om op te bou 'n skikking in die geheue wat malloc ed in die teiken program. Omdat C is so wydverspreid, die meeste van die bedrag wat in voorbeelde in hierdie handleiding uitdrukkings in C. sien afdeling Gebruik GDB met verskillende tale. vir meer inligting oor hoe om uitdrukkings in ander tale gebruik. In hierdie artikel bespreek ons operateurs wat jy kan gebruik in GDB uitdrukkings ongeag van jou programmeertaal. Gooi ondersteun in alle tale, nie net in C, want dit is so nuttig om 'n aantal gewerp in 'n wyser om 'n struktuur op daardie adres in die geheue te ondersoek. GDB ondersteun hierdie operateurs, bykomend tot die algemene na programmeertale: 'n binêre operateur vir die behandeling van dele van die geheue as skikkings. Sien artikel Kunsmatige skikkings. vir meer inligting. :: Kan jy 'n veranderlike spesifiseer in terme van die lêer of funksie waar dit gedefinieer. Sien artikel Program veranderlikes. addr verwys na 'n voorwerp van tipe tipe gestoor adres addr in die geheue. addr kan enige uitdrukking waarvan die waarde 'n heelgetal of wyser (maar hakies benodig om binêre operateurs, net soos in 'n cast) wees. Dit konstruk is, ongeag van watter soort data normaal is veronderstel om te woon op addr toegelaat. 8.2 Program veranderlikes Die mees algemene soort van uitdrukking te gebruik, is die naam van 'n veranderlike in jou program. Veranderlikes in uitdrukkings verstaan in die gekose stapel raamwerk (sien afdeling kies 'n raam) hulle moet óf: globale (of lêer-statiese) sigbaar volgens die omvang reëls van die programmeringstaal van die punt van die uitvoering in die raam Dit beteken dat in die funksie wat jy kan ondersoek en gebruik die veranderlike 'n wanneer jou program is die uitvoering van binne die funksie cat. maar jy kan net gebruik of ondersoek die veranderlike b terwyl jou program is die uitvoering van die binnekant van die blok waar b verklaar. Daar is 'n uitsondering: jy kan verwys na 'n veranderlike of funksie waarvan die omvang is 'n enkele bron lêer, selfs as die huidige uitvoering punt is nie in hierdie lêer. Maar dit is moontlik om meer as een so 'n veranderlike of funksie met dieselfde naam het (in verskillende bronkodelêers). As dit gebeur, met verwysing na daardie naam het onvoorspelbare gevolge. As jy wil, kan jy 'n statiese veranderlike spesifiseer in 'n bepaalde funksie of lêer, die gebruik van die kolon-kolon notasie: Hier lêer of funksie is die naam van die konteks vir die statiese veranderlike. In die geval van lêername, kan jy aanhalings gebruik om seker te maak GDB ontleed die lêernaam as 'n enkele woord - byvoorbeeld, 'n globale waarde van x omskryf in f2.c druk. Dit gebruik van :: baie selde in konflik met die baie soortgelyke gebruik van dieselfde notasie in C. GDB ondersteun ook gebruik van die C omvang resolusie operateur in GDB uitdrukkings. Waarskuwing: Soms kan 'n plaaslike veranderlike lyk die verkeerde waarde op sekere punte in 'n funksie het - net ná toegang tot 'n nuwe ruimte, en net voor uitgang. Jy kan hierdie probleem te sien wanneer jy trap deur masjien instruksies. Dit is omdat, op die meeste masjiene, neem dit meer as een instruksie om 'n stapel raamwerk (insluitend plaaslik veranderlike definisies) as jy versterking deur masjien instruksies, kan veranderlikes verskyn aan die verkeerde waardes het tot die stapel raamwerk heeltemal gebou is. Op uitgang, dit neem gewoonlik ook meer as 'n masjien opdrag om 'n stapel raamwerk te vernietig nadat jy begin versterking deur middel van daardie groep van instruksies, kan plaaslike veranderlike definisies weg wees. Dit kan ook gebeur wanneer die samesteller beduidende optimalisaties doen. Om seker te wees van altyd sien akkurate waardes, draai af al optimization by die opstel van. Nog 'n moontlike effek van samesteller optimalisaties is om ongebruikte veranderlikes te optimaliseer uit bestaan, of veranderlikes toeken om registers (in teenstelling met geheue-adresse). Afhangende van die steun vir so 'n geval wat aangebied word deur die ontfoutinligting formaat wat gebruik word deur die samesteller, kan GDB nie in staat wees om waardes vir so 'n plaaslike veranderlikes te vertoon. As dit gebeur, sal GDB 'n boodskap soos hierdie te druk: Om sulke probleme op te los, hetsy heropstel sonder optimalisaties, of gebruik 'n ander ontfoutinligting formaat, indien die samesteller verskeie sulke formate ondersteun. Byvoorbeeld, GCC, die GNU C / C samesteller ondersteun gewoonlik die - gstabs opsie. - gstabs produseer ontfoutinligting in 'n formaat wat is beter as formate soos COFF. Jy mag in staat wees om DWARF2 (-gdwarf-2), wat ook 'n effektiewe vorm vir ontfoutinligting gebruik. Sien artikel Options om foute Jou Program of GNU CC in gebruik van GNU CC. vir meer inligting. Die linker operand van moet in die geheue woon. Verskeidenheid waardes gemaak in hierdie manier op te tree, net soos ander skikkings in terme van subscript, en word gedwing om wenke wanneer dit gebruik word in uitdrukkings. Kunsmatige skikkings verskyn meestal in uitdrukkings via die waarde geskiedenis (sien afdeling Waarde geskiedenis), na die druk een uit. Nog 'n manier om 'n kunsmatige verskeidenheid te skep, is 'n cast gebruik. Dit re-interpreteer 'n waarde asof dit 'n skikking. Die waarde hoef nie in die geheue: As 'n gerief, as jy die skikking lengte uitlaat (soos in (tipe) waarde) GDB bereken die grootte van die waarde vul (soos sizeof (waarde) / sizeof (tipe) Soms is die kunsmatige. N. f. N. f. u. Dit is die standaard. Dit is die standaard. . . . .
No comments:
Post a Comment