C++FILT(1) Instrumente pentru dezvoltare(programare) GNU C++FILT(1) NUME c++filt - decodifica simbolurile C++ i Java REZUMAT c++filt [-_|--strip-underscore] [-n|--no-strip-underscore] [-p|--no-params] [-t|--types] [-i|--no-verbose] [-r|--no-recurse-limit] [-R|--recurse-limit] [-s format|--format=format] [--help] [--version] [simbol...] DESCRIERE Limbajele C++ i Java ofera supraincarcarea funciilor, ceea ce inseamna ca putei scrie mai multe funcii cu acelai nume, cu condiia ca fiecare funcie sa accepte parametri de tipuri diferite. Pentru a putea distinge aceste funcii cu nume similare, C++ i Java le codifica intr-un nume de asamblor de nivel inferior care identifica in mod unic fiecare versiune diferita. Acest proces este cunoscut sub numele de mangling. Programul c++filt [1] realizeaza cartografierea inversa: decodifica (demangles) numele de nivel scazut in nume de nivel utilizator, astfel incat acestea sa poata fi citite. Fiecare cuvant alfanumeric (format din litere, cifre, caractere de subliniere, dolari sau puncte) care apare in datele de intrare este un nume potenial modificat(codificat). In cazul in care numele se decodifica intr-un nume C++, numele C++ inlocuiete numele de nivel inferior in ieire, in caz contrar, cuvantul original este afiat la ieire. In acest fel, putei trece un intreg fiier sursa de asamblare, care conine nume modificate, prin c++filt i sa vedei acelai fiier sursa care conine nume decodificate. De asemenea, putei utiliza c++filt pentru a descifra simboluri individuale, trecandu-le in linia de comanda: c++filt Daca nu sunt date argumente simbol, c++filt citete in schimb numele simbolurilor de la intrarea standard. Toate rezultatele sunt afiate la ieirea standard. Diferena dintre citirea numelor din linia de comanda i citirea numelor de la intrarea standard consta in faptul ca se ateapta ca argumentele din linia de comanda sa fie doar nume modificate i nu se efectueaza nicio verificare pentru a le separa de textul din jur. Astfel, de exemplu: c++filt -n _Z1fv va funciona i va decodifica numele in "f()", in timp ce: c++filt -n _Z1fv, nu va funciona; (observai virgula suplimentara de la sfaritul numelui modificat, care il face nevalid). Cu toate acestea, aceasta comanda va funciona: echo _Z1fv, | c++filt -n i va afia ,,f(),", adica numele decodificat urmat de o virgula la sfarit. Acest comportament se datoreaza faptului ca, atunci cand numele sunt citite de la intrarea standard, este de ateptat ca acestea sa faca parte dintr-un fiier sursa de asamblare in care ar putea exista caractere suplimentare, straine, care sa urmeze dupa un nume modificat. De exemplu: .type _Z1fv, @funcie OPIUNI -_ --strip-underscore Pe unele sisteme, atat compilatoarele C, cat i cele C++ pun o subliniere in faa fiecarui nume. De exemplu, numele C ,,foo" primete numele de nivel inferior ,,_foo". Aceasta opiune elimina sublinierea iniiala. Faptul ca c++filt elimina implicit sublinierea depinde de inta. -n --no-strip-underscore Nu elimina liniua de subliniere iniiala. -p --no-params Atunci cand se decodifica numele unei funcii, nu se afieaza tipurile de parametri ai funciei. -t --types Incearca sa decodifice tipurile, precum i numele funciilor. Acest lucru este dezactivat in mod implicit, deoarece tipurile de tip ,,mangled" (codificate) sunt utilizate in mod normal numai la nivel intern in compilator i pot fi confundate cu nume care nu sunt ,,mangled". De exemplu, o funcie numita ,,a", tratata ca un nume de tip ,,mangled", ar fi ,,signed char" (caracter cu semn). -i --no-verbose Nu include detalii de implementare (daca exista) in rezultatul decodificat. -r -R --recurse-limit --no-recurse-limit --recursion-limit --no-recursion-limit Activeaza sau dezactiveaza limitarea numarului de recursivitai efectuate in timpul decodificarii irurilor de caractere. Deoarece formatele de manipulare a numelor permit un nivel infinit de recursivitate, este posibil sa se creeze iruri a caror decodificare va epuiza spaiul de stiva disponibil pe calculatorul gazda, declanand o eroare de memorie. Limitarea incearca sa previna acest lucru prin restricionarea recursivitaii la 2048 de niveluri de imbricare. In mod implicit, aceasta limita este activata, dar poate fi necesar sa fie dezactivata pentru a dezmembra nume cu adevarat complicate. Reinei totui ca, daca limita de recursivitate este dezactivata, este posibila epuizarea stivei i orice raport de eroare privind un astfel de eveniment va fi respins. Opiunea -r este un sinonim pentru opiunea --no-recurse-limit. Opiunea -R este sinonima cu opiunea --recurse-limit. -s format --format=format c++filt poate decodifica diferite metode de mangling (codificare), utilizate de diferite compilatoare. Argumentul acestei opiuni selecteaza metoda pe care o utilizeaza: "auto" Selecie automata bazata pe executabil (metoda implicita) "gnu" cea utilizata de compilatorul GNU C++ (g++) "lucid" cea utilizata de compilatorul Lucid (lcc) "arm" cea specificata de ,,C++ Annotated Reference Manual" (Manualul de referina adnotat C++) "hp" cea utilizata de compilatorul HP (aCC) "edg" cea utilizata de compilatorul EDG "gnu-v3" cea utilizata de compilatorul GNU C++ (g++) cu ABI V3. "java" cea utilizata de compilatorul GNU Java (gcj) "gnat" cea utilizata de compilatorul GNU Ada (GNAT). --help Afieaza un rezumat al opiunilor lui c++filt i iese. --version Afieaza numarul de versiune al lui c++filt i iese. @fiier Citete opiunile liniei de comanda din fiier. Opiunile citite sunt inserate in locul opiunii originale @fiier. Daca fiier nu exista sau nu poate fi citit, atunci opiunea va fi tratata literal i nu va fi eliminata. Opiunile din fiier sunt separate prin spaii albe. Un caracter de spaiere poate fi inclus intr-o opiune prin includerea intregii opiuni intre ghilimele simple sau duble. Orice caracter (inclusiv o bara oblica inversa) poate fi inclus prin prefixarea caracterului care urmeaza sa fie inclus cu o bara oblica inversa. fiier poate conine la randul sau opiuni @fiier suplimentare; orice astfel de opiuni vor fi procesate in mod recursiv. NOTE DE SUBSOL 1. MS-DOS nu permite caracterele ,,+" in numele fiierelor, aa ca pe MS-DOS acest program se numete CXXFILT. CONSULTAI I intrarile Info pentru binutils. DREPTURI DE AUTOR Drepturi de autor (C) 1991-2024 Free Software Foundation, Inc. Se acorda permisiunea de a copia, distribui i/sau modifica acest document in conformitate cu termenii Licenei GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioara publicata de Free Software Foundation; fara seciuni invariante, fara texte de coperta i fara texte de contra coperta. O copie a licenei este inclusa in seciunea intitulata ,,GNU Free Documentation License". TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . binutils-2.42.0 1 februarie 2024 C++FILT(1)