| C++FILT(1) | Instrumente pentru dezvoltare(programare) GNU | C++FILT(1) |
c++filt - decodifică simbolurile C++ și Java
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...]
Limbajele C++ și Java oferă supraîncărcarea funcțiilor, ceea ce înseamnă că puteți scrie mai multe funcții cu același nume, cu condiția ca fiecare funcție să accepte parametri de tipuri diferite. Pentru a putea distinge aceste funcții cu nume similare, C++ și Java le codifică într-un nume de asamblor de nivel inferior care identifică în mod unic fiecare versiune diferită. Acest proces este cunoscut sub numele de mangling. Programul c++filt [1] realizează cartografierea inversă: decodifică (demangles) numele de nivel scăzut în nume de nivel utilizator, astfel încât acestea să poată fi citite.
Fiecare cuvânt alfanumeric (format din litere, cifre, caractere de subliniere, dolari sau puncte) care apare în datele de intrare este un nume potențial modificat(codificat). În cazul în care numele se decodifică într-un nume C++, numele C++ înlocuiește numele de nivel inferior în ieșire, în caz contrar, cuvântul original este afișat la ieșire. În acest fel, puteți trece un întreg fișier sursă de asamblare, care conține nume modificate, prin c++filt și să vedeți același fișier sursă care conține nume decodificate.
De asemenea, puteți utiliza c++filt pentru a descifra simboluri individuale, trecându-le în linia de comandă:
c++filt <simbol>
Dacă nu sunt date argumente simbol, c++filt citește în schimb numele simbolurilor de la intrarea standard. Toate rezultatele sunt afișate la ieșirea standard. Diferența dintre citirea numelor din linia de comandă și citirea numelor de la intrarea standard constă în faptul că se așteaptă ca argumentele din linia de comandă să fie doar nume modificate și nu se efectuează nicio verificare pentru a le separa de textul din jur. Astfel, de exemplu:
c++filt -n _Z1fv
va funcționa și va decodifica numele în "f()", în timp ce:
c++filt -n _Z1fv,
nu va funcționa; (observați virgula suplimentară de la sfârșitul numelui modificat, care îl face nevalid). Cu toate acestea, această comandă va funcționa:
echo _Z1fv, | c++filt -n
și va afișa „f(),”, adică numele decodificat urmat de o virgulă la sfârșit. Acest comportament se datorează faptului că, atunci când numele sunt citite de la intrarea standard, este de așteptat ca acestea să facă parte dintr-un fișier sursă de asamblare în care ar putea exista caractere suplimentare, străine, care să urmeze după un nume modificat. De exemplu:
.type _Z1fv, @funcție
În mod implicit, această limită este activată, dar poate fi necesar să fie dezactivată pentru a dezmembra nume cu adevărat complicate. Rețineți totuși că, dacă limita de recursivitate este dezactivată, este posibilă epuizarea stivei și orice raport de eroare privind un astfel de eveniment va fi respins.
Opțiunea -r este un sinonim pentru opțiunea --no-recurse-limit. Opțiunea -R este sinonimă cu opțiunea --recurse-limit.
Opțiunile din fișier sunt separate prin spații albe. Un caracter de spațiere poate fi inclus într-o opțiune prin includerea întregii opțiuni între ghilimele simple sau duble. Orice caracter (inclusiv o bară oblică inversă) poate fi inclus prin prefixarea caracterului care urmează să fie inclus cu o bară oblică inversă. fișier poate conține la rândul său opțiuni @fișier suplimentare; orice astfel de opțiuni vor fi procesate în mod recursiv.
intrările Info pentru binutils.
Drepturi de autor © 1991-2025 Free Software Foundation, Inc.
Se acordă permisiunea de a copia, distribui și/sau modifica acest document în conformitate cu termenii Licenței GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioară publicată de Free Software Foundation; fără secțiuni invariante, fără texte de copertă și fără texte de contra copertă. O copie a licenței este inclusă în secțiunea intitulată „GNU Free Documentation License”.
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
| 3 martie 2025 | binutils-2.44 |