Aceasta este comanda abidiff care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
abidiff - comparați ABI-urile fișierelor ELF
abidiff compară interfețele binare de aplicație (ABI) a două biblioteci partajate în ELF
format. Emite un raport semnificativ care descrie diferențele dintre cele două ABI.
Pentru un raport cuprinzător de modificare a ABI care include modificări ale funcției și variabilei
subtipuri, cele două biblioteci partajate de intrare trebuie să fie însoțite de informațiile lor de depanare
in PITIC format. În rest, numai ELF simbolurile care au fost adăugate sau eliminate sunt raportate.
INVOCARE
abidiff [opțiuni]
OPŢIUNI
· --Ajutor | -h
Afișează un scurt ajutor despre comandă și ieșire.
· --versiune | -v
Afișați versiunea programului și ieșiți.
· --debug-info-dir1 | --d1 <di-path1>
Pentru cazurile în care informațiile de depanare pentru prima bibliotecă comună este împărțit într-o
dosar separat, spune abidiff unde să găsiți acel fișier separat de informații de depanare.
Rețineți că di-path trebuie să indice directorul rădăcină în care se află informațiile de depanare
este aranjat într-o manieră asemănătoare unui copac. În sistemele bazate pe Red Hat, acel director este
obișnuit /usr/lib/debug.
Rețineți, de asemenea, că această opțiune nu este obligatorie pentru informațiile de depanare divizate instalate de
managerul de pachete al sistemului dvs. pentru că atunci abidiff știe unde să-l găsească.
· --debug-info-dir2 | --d2 <di-path2>
Aprecieri --debug-info-dir1, această opțiune spune abidiff unde să găsiți depanarea divizată
informatii pentru a doua bibliotecă comună fișier.
· --stat
În loc să afișeze diferențele detaliate ABI între prima bibliotecă comună și
a doua bibliotecă comună, afișați doar câteva statistici rezumate despre aceste diferențe.
· --symtabs
Afișați numai tabelele cu simboluri ale prima bibliotecă comună și a doua bibliotecă comună.
· --deleted-fns
În raportul rezultat despre diferențele dintre prima bibliotecă comună și
a doua bibliotecă comună, afișează numai funcțiile definite global care au fost șterse
din prima bibliotecă comună.
· --schimbat-fns
În raportul rezultat despre diferențele dintre prima bibliotecă comună și
a doua bibliotecă comună, afișează doar modificările în subtipurile funcțiilor globale
definit în prima bibliotecă comună.
· --adăugat-fns
În raportul rezultat despre diferențele dintre prima bibliotecă comună și
a doua bibliotecă comună, afișează numai funcțiile definite global la care au fost adăugate
a doua bibliotecă comună.
· --deleted-vars
În raportul rezultat despre diferențele dintre prima bibliotecă comună și
a doua bibliotecă comună, afișează numai variabilele definite global care au fost șterse
din prima bibliotecă comună.
· --schimbate-vars
În raportul rezultat despre diferențele dintre prima bibliotecă comună și
a doua bibliotecă comună, afișează doar modificările în subtipurile globale
variabilele definite în prima bibliotecă comună
· --adăugat-vars
În raportul rezultat despre diferențele dintre prima bibliotecă comună și
a doua bibliotecă comună, afișează numai variabilele globale la care au fost adăugate (definite).
a doua bibliotecă comună.
· --no-link-name
În raportul rezultat, nu afișați numele legăturii adăugate, eliminate sau
funcții sau variabile modificate.
· --no-show-locs
Nu afișați informații despre locația din al doilea comun bibliotecă respectivul
tipul a fost schimbat.
· --fără-simboluri-nereferențiate
În raportul rezultat, nu afișați informații despre modificarea funcției și
simboluri variabile care nu sunt referite de nicio informație de depanare. Rețineți că pentru
aceste simboluri nu fac referire de nicio informație de depanare, informațiile de modificare
simbolurile afișate sunt fie adăugate, fie eliminate.
· --suprimări | --supr <cale spre suprimari>
Utilizați un fișier cu specificații de suprimare situat la cale spre suprimari. Rețineți că acest lucru
opțiunea poate apărea de mai multe ori pe linia de comandă; toată suprimarea
sunt apoi luate în considerare fișierele de specificații.
· --cădere brusca <regex>
Când citiți prima bibliotecă comună și a doua bibliotecă comună Fișiere de intrare ELF, aruncați
funcțiile și variabilele definite global, care denumesc se potrivesc cu expresia regulată
regex. Ca urmare, nu va fi emisă nicio modificare care implică aceste funcții sau variabile
în raportul dif.
· --drop-fn <regex>
Când citiți prima bibliotecă comună și a doua bibliotecă comună Fișiere de intrare ELF, aruncați
funcțiile definite la nivel global, a căror denumire se potrivește cu expresia regulată regex. Ca a
rezultat, nicio modificare care implică aceste funcții nu va fi emisă în raportul de dif.
· --drop-var <regex>
Când citiți prima bibliotecă comună și a doua bibliotecă comună Fișiere de intrare ELF, aruncați
variabilele definite global care se potrivesc cu expresia regulată regex.
· --a pastra <regex>
Când citiți prima bibliotecă comună și a doua bibliotecă comună Fișiere de intrare ELF, păstrați
funcțiile și variabilele definite la nivel global cărora numele se potrivesc cu expresia regulată
regex. Toate celelalte funcții și variabile sunt aruncate pe podea și, prin urmare, nu vor fi
apar în raportul de diferențe rezultat.
· --ţine-fn <regex>
Când citiți prima bibliotecă comună și a doua bibliotecă comună Fișiere de intrare ELF, păstrați
funcțiile definite la nivel global, a căror denumire se potrivește cu expresia regulată regex. Toate
alte funcții sunt aruncate pe podea și astfel nu vor apărea în rezultatul
raportul dif.
· --ţine-var <regex>
Când citiți prima bibliotecă comună și a doua bibliotecă comună Fișiere de intrare ELF, păstrați
definite global care nume se potrivesc cu expresia regulată regex. Toti ceilalti
variabilele sunt aruncate pe podea și, prin urmare, nu vor apărea în diferența rezultată
raport.
· --inofensiv
În raportul de diferențe, afișați numai modificările inofensive. În mod implicit, cei inofensivi
modificările sunt filtrate din raportul de diferențe mențin dezordinea la minimum și au un
schimbare mai mare pentru a identifica problemele reale ABI.
· --nu-dăunătoare
În raportul de diferențe, nu afișați modificările dăunătoare. În mod implicit, numai cele dăunătoare
modificările sunt afișate în raportul dif.
· --redundant
În raportul de diferențe, afișați modificări redundante. O schimbare redundantă este o schimbare
care a fost afișat în altă parte a raportului.
· --nu-redundant
În raportul de diferențe, faceți NU afișează modificări redundante. O schimbare redundantă este o schimbare
care a fost afișat în altă parte a raportului. Această opțiune este activată de
Mod implicit.
· --fără-arhitectură
Nu luați în considerare arhitectura atunci când comparați ABI-urile.
· --dump-diff-tree
După raportul de diferență, emiteți o reprezentare textuală a arborelui nodurilor de diferență utilizat de
motorul de comparație pentru a reprezenta funcțiile și variabilele modificate. Acea
reprezentarea este emisă la ieșirea erorii în scopuri de depanare. Rețineți că
acest arbore de diferențe este relevant doar pentru funcțiile și variabilele care au un subtip
schimbări. Funcțiile și variabilele adăugate sau eliminate nu au niciun arbore de noduri de diferență
asociate acestora.
· --statistici
Emite statistici despre diverse lucruri interne.
· --verbos
Emiteți jurnalele detaliate despre progresul diverselor lucruri interne.
A REVENI VALORI
Codul de ieșire al abidiff comanda este fie 0 dacă ABI-ul binarelor care sunt comparate
sunt egale sau diferite de zero dacă diferă sau dacă instrumentul a întâmpinat o eroare.
În ultimul caz, codul de ieșire este un câmp de biți lat de 8 biți în care fiecare bit are un
sens specific.
Primul bit, de valoare 1, numit ABIDIFF_ERROR înseamnă că a fost o eroare.
Al doilea bit, de valoare 2, numit ABIDIFF_USAGE_ERROR înseamnă că a existat o eroare în drum
utilizatorul a invocat instrumentul. Poate fi setat, de exemplu, dacă utilizatorul a invocat instrumentul
cu un comutator necunoscut de linie de comandă, cu un număr sau un argument greșit etc. Dacă acest bit este
set, apoi ABIDIFF_ERROR bit trebuie setat de asemenea.
Al treilea bit, de valoare 4, numit ABIDIFF_ABI_CHANGE înseamnă ABI-ul ființei binare
comparate sunt diferite.
Al patrulea bit, de valoare 8, numit ABIDIFF_ABI_INCOMPATIBLE_CHANGE înseamnă ABI al
binarele comparate sunt diferite într-un mod incompatibil. Dacă acest bit este setat, atunci
ABIDIFF_ABI_CHANGE bit trebuie setat de asemenea. Dacă ABIDIFF_ABI_CHANGE este setat și
ABIDIFF_INCOMPATIBLE_CHANGE is NU setat, atunci înseamnă că ABI-urile comparate ar putea
sau ar putea să nu fie compatibil. În acest caz, o ființă umană trebuie să revizuiască modificările ABI
pentru a decide dacă sunt compatibile sau nu.
Biții rămași nu sunt folosiți pentru moment.
UTILIZARE EXEMPLE
1. Detectarea unei modificări într-un subtip al unei funcții:
$ cat -n test-v0.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 struct S0
5 {
6 int m0;
7};
8
9 nul
10 foo(S0* /*nume_parametru*/)
11 {
12 // faceți ceva cu parameter_name.
13}
$
$ cat -n test-v1.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 struct type_base
5 {
6 int introdus;
7};
8
9 struct S0 : public type_base
10 {
11 int m0;
12};
13
14 nul
15 foo(S0* /*nume_parametru*/)
16 {
17 // faceți ceva cu parameter_name.
18}
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
Rezumatul modificărilor funcțiilor: 0 Eliminat, 1 Modificat, 0 Funcție adăugată
Rezumatul modificărilor variabilelor: 0 Eliminate, 0 Modificate, 0 Variabilă adăugată
1 funcție cu o modificare indirectă de subtip:
[C]„funcția void foo(S0*)” are câteva modificări indirecte de subtip:
parametrul 0 de tip „S0*” are modificări de subtip:
în a indicat să tastați „struct S0”:
dimensiunea s-a schimbat de la 32 la 64 de biți
1 inserție de clasă de bază:
struct type_base
1 modificare membru de date:
Offset-ul „int S0::m0” s-a modificat de la 0 la 32
$
2. Detectarea unei alte modificări într-un subtip al unei funcții:
$ cat -n test-v0.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 struct S0
5 {
6 int m0;
7};
8
9 nul
10 foo(S0& /*nume_parametru*/)
11 {
12 // faceți ceva cu parameter_name.
13}
$
$ cat -n test-v1.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 struct S0
5 {
6 caracter inserted_member;
7 int m0;
8};
9
10 nul
11 foo(S0& /*nume_parametru*/)
12 {
13 // faceți ceva cu parameter_name.
14}
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
Rezumatul modificărilor funcțiilor: 0 Eliminat, 1 Modificat, 0 Funcție adăugată
Rezumatul modificărilor variabilelor: 0 Eliminate, 0 Modificate, 0 Variabilă adăugată
1 funcție cu o modificare indirectă de subtip:
[C]„funcția void foo(S0&)” are câteva modificări indirecte de subtip:
parametrul 0 de tip „S0&” are modificări de subtip:
în tipul de referință „struct S0”:
dimensiunea s-a schimbat de la 32 la 64 de biți
Inserarea unui membru de date:
„char S0::inserted_member”, la offset 0 (în biți)
1 modificare membru de date:
Offset-ul „int S0::m0” s-a modificat de la 0 la 32
$
3. Detectarea faptului că funcțiile au fost eliminate sau adăugate la o bibliotecă:
$ cat -n test-v0.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 struct S0
5 {
6 int m0;
7};
8
9 nul
10 foo(S0& /*nume_parametru*/)
11 {
12 // faceți ceva cu parameter_name.
13}
$
$ cat -n test-v1.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 struct S0
5 {
6 caracter inserted_member;
7 int m0;
8};
9
10 nul
11 bare(S0& /*nume_parametru*/)
12 {
13 // faceți ceva cu parameter_name.
14}
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
Rezumatul modificărilor funcțiilor: 1 Eliminat, 0 Modificat, 1 Funcții adăugate
Rezumatul modificărilor variabilelor: 0 Eliminate, 0 Modificate, 0 Variabilă adăugată
1 Funcție eliminată:
„funcție void foo(S0&)” {_Z3fooR2S0}
1 funcție adăugată:
„bară nulă funcție (S0&)” {_Z3barR2S0}
$
Utilizați abidiff online folosind serviciile onworks.net