abidiff - Online w chmurze

To jest polecenie abidiff, które można uruchomić w darmowym dostawcy hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

PROGRAM:

IMIĘ


abidiff - porównaj ABI plików ELF

abidiff porównuje interfejsy binarne aplikacji (ABI) dwóch współdzielonych bibliotek w ELF
format. Emituje znaczący raport opisujący różnice między dwoma ABI.

Aby uzyskać kompleksowy raport zmian ABI, który zawiera zmiany dotyczące funkcji i zmiennych
podtypy, dwóm wejściowym bibliotekom współdzielonym muszą towarzyszyć ich informacje debugowania
in KRASNOLUD format. Inaczej tylko ELF zgłaszane są symbole, które zostały dodane lub usunięte.

WEZWANIE


abidiff [opcje]

OPCJE


· --help | -h

Wyświetl krótką pomoc dotyczącą polecenia i wyjdź.

· --wersja | -v

Wyświetl wersję programu i wyjdź.

· --debug-info-katalog1 | --d1 <dwuścieżka1>

W przypadkach, gdy informacje debugowania dla pierwsza udostępniona biblioteka dzieli się na a
osobny plik, mówi abidif gdzie znaleźć ten oddzielny plik informacji debugowania.

Należy pamiętać, że dwuścieżka musi wskazywać katalog główny, w którym znajdują się informacje debugowania
ułożony jest w sposób przypominający drzewo. W systemach opartych na Red Hat ten katalog jest
zazwyczaj /usr/lib/debug.

Należy również zauważyć, że ta opcja nie jest obowiązkowa w przypadku dzielonych informacji debugowania instalowanych przez
menedżer pakietów twojego systemu, ponieważ wtedy abidif wie, gdzie go znaleźć.

· --debug-info-katalog2 | --d2 <dwuścieżka2>

Jak --debug-info-katalog1, ta opcja mówi abidif gdzie znaleźć podzielone debugowanie
informacje dla druga biblioteka współdzielona plik.

· --statystyka

Zamiast wyświetlać szczegółowe różnice ABI między pierwsza udostępniona biblioteka i
druga biblioteka współdzielona, wystarczy wyświetlić podsumowanie statystyk dotyczących tych różnic.

· --symtaby

Wyświetlaj tylko tabele symboli pierwsza udostępniona biblioteka i druga biblioteka współdzielona.

· --usunięte-fns

W powstałym raporcie o różnicach między pierwsza udostępniona biblioteka i
druga biblioteka współdzielona, wyświetlają tylko globalnie zdefiniowane funkcje, które zostały usunięte
od pierwsza udostępniona biblioteka.

· --zmieniony-fns

W powstałym raporcie o różnicach między pierwsza udostępniona biblioteka i
druga biblioteka współdzielona, wyświetlają tylko zmiany w podtypach funkcji globalnych
zdefiniowane w pierwsza udostępniona biblioteka.

· --dodane-fns

W powstałym raporcie o różnicach między pierwsza udostępniona biblioteka i
druga biblioteka współdzielona, wyświetlają tylko globalnie zdefiniowane funkcje, do których zostały dodane
druga biblioteka współdzielona.

· --usunięte-zmienne

W powstałym raporcie o różnicach między pierwsza udostępniona biblioteka i
druga biblioteka współdzielona, wyświetlają tylko globalnie zdefiniowane zmienne, które zostały usunięte
od pierwsza udostępniona biblioteka.

· --zmieniono-zmienne

W powstałym raporcie o różnicach między pierwsza udostępniona biblioteka i
druga biblioteka współdzielona, wyświetlają tylko zmiany w podtypach global
zmienne zdefiniowane w pierwsza udostępniona biblioteka

· --dodane-zmienne

W powstałym raporcie o różnicach między pierwsza udostępniona biblioteka i
druga biblioteka współdzielona, wyświetlają tylko zmienne globalne, do których zostały dodane (zdefiniowane).
druga biblioteka współdzielona.

· --nazwa-bez-powiązania

W wynikowym raporcie nie wyświetlaj nazw powiązań dodanych, usuniętych lub
zmienione funkcje lub zmienne.

· --no-show-loc
Nie pokazuj informacji o tym, gdzie w Dopiero shared biblioteka odpowiedni
typ został zmieniony.

· --no-bez-odniesień-symbole

W wynikowym raporcie nie wyświetlaj informacji o zmianie funkcji i
symbole zmiennych, do których nie odwołują się żadne informacje debugowania. Zauważ, że dla
te symbole, do których nie odwołują się żadne informacje debugowania, informacje o zmianie
wyświetlane są dodane lub usunięte symbole.

· --tłumienie | --wspomaganie <ścieżka do tłumienia>

Użyj pliku specyfikacji pomijania znajdującego się pod adresem ścieżka do tłumienia. Zwróć uwagę, że this
opcja może pojawić się wiele razy w wierszu poleceń; całe tłumienie
brane są pod uwagę pliki specyfikacji.

· --upuszczać <regex>

Podczas czytania ww pierwsza udostępniona biblioteka i druga biblioteka współdzielona Pliki wejściowe ELF, upuść
globalnie zdefiniowane funkcje i zmienne, których nazwy pasują do wyrażenia regularnego
regex. W rezultacie żadne zmiany dotyczące tych funkcji lub zmiennych nie zostaną wyemitowane
w raporcie różnicowym.

· --drop-fn <regex>

Podczas czytania ww pierwsza udostępniona biblioteka i druga biblioteka współdzielona Pliki wejściowe ELF, upuść
globalnie zdefiniowane funkcje, których nazwa pasuje do wyrażenia regularnego regex. Jak
wynik, żadna zmiana dotycząca tych funkcji nie zostanie wyemitowana w raporcie różnic.

· --drop-var <regex>

Podczas czytania ww pierwsza udostępniona biblioteka i druga biblioteka współdzielona Pliki wejściowe ELF, upuść
globalnie zdefiniowane zmienne pasujące do wyrażenia regularnego regex.

· --trzymać <regex>

Podczas czytania ww pierwsza udostępniona biblioteka i druga biblioteka współdzielona Pliki wejściowe ELF, zachowaj
globalnie zdefiniowane funkcje i zmienne, których nazwy pasują do wyrażenia regularnego
regex. Wszystkie inne funkcje i zmienne są upuszczane na podłogę i dlatego nie będą
pojawiają się w wynikowym raporcie różnic.

· --keep-fn <regex>

Podczas czytania ww pierwsza udostępniona biblioteka i druga biblioteka współdzielona Pliki wejściowe ELF, zachowaj
globalnie zdefiniowane funkcje, których nazwa pasuje do wyrażenia regularnego regex. Wszystko
inne funkcje są upuszczane na podłogę i dlatego nie pojawią się w wynikach
raport różnic.

· --keep-var <regex>

Podczas czytania ww pierwsza udostępniona biblioteka i druga biblioteka współdzielona Pliki wejściowe ELF, zachowaj
globalnie zdefiniowane, które nazwy pasują do wyrażenia regularnego regex. Wszystkie pozostałe
zmienne są upuszczane na podłogę i dlatego nie pojawią się w wynikowym pliku różnicowym
zgłosić.

· --niegroźny

W raporcie różnic wyświetl tylko nieszkodliwe zmiany. Domyślnie nieszkodliwe
zmiany są odfiltrowywane z raportu różnic, ogranicz bałagan do minimum i miej
większa zmiana, aby wykryć prawdziwe problemy z ABI.

· --nie-szkodliwe

W raporcie różnic nie wyświetlaj szkodliwych zmian. Domyślnie tylko szkodliwe
zmiany są wyświetlane w raporcie różnic.

· --zbędny

W raporcie różnic wyświetlaj zbędne zmiany. Zbędna zmiana to zmiana
który został wyświetlony w innym miejscu raportu.

· --nie-zbędne

W raporcie różnicowym zrób NIE wyświetlać zbędne zmiany. Zbędna zmiana to zmiana
który został wyświetlony w innym miejscu raportu. Ta opcja jest włączona przez
domyślna.

· --brak architektury

Nie bierz pod uwagę architektury podczas porównywania ABI.

· --dump-diff-drzewo
Po raporcie diff wyemituj tekstową reprezentację drzewa węzłów diff używanego przez
porównywarkę do reprezentowania zmienionych funkcji i zmiennych. To
reprezentacja jest emitowana do wyjścia błędu w celu debugowania. Zauważ to
to drzewo różnic dotyczy tylko funkcji i zmiennych, które mają jakiś podtyp
zmiany. Dodane lub usunięte funkcje i zmienne nie mają żadnego drzewa węzłów różnic
z nimi związany.

· --statystyki

Wysyłaj statystyki dotyczące różnych wewnętrznych rzeczy.

· --gadatliwy

Emituj szczegółowe dzienniki dotyczące postępu różnych wewnętrznych rzeczy.

POWRÓT WARTOŚCI


Kod wyjścia z abidif polecenie ma wartość 0, jeśli ABI porównywanych plików binarnych
są równe lub niezerowe, jeśli się różnią lub jeśli narzędzie napotkało błąd.

W tym drugim przypadku kod wyjścia to pole bitowe o szerokości 8 bitów, w którym każdy bit ma wartość
konkretne znaczenie.

Pierwszy bit o wartości 1, nazwany ABIDIFF_BŁĄD oznacza, że ​​wystąpił błąd.

Drugi bit o wartości 2 o nazwie ABIDIFF_USAGE_ERROR oznacza, że ​​wystąpił błąd w drodze
użytkownik wywołał narzędzie. Można to ustawić na przykład, jeśli użytkownik wywołał narzędzie
z nieznanym przełącznikiem wiersza poleceń, z błędną liczbą lub argumentem itp. Jeśli ten bit jest
ustawić, a następnie ABIDIFF_BŁĄD Bit również musi być ustawiony.

Trzeci bit o wartości 4 o nazwie ABIDIFF_ABI_CHANGE oznacza ABI istot binarnych
porównywane są różne.

Czwarty bit o wartości 8 o nazwie ABIDIFF_ABI_INCOMPATIBLE_CHANGE oznacza ABI
porównywane pliki binarne różnią się w niekompatybilny sposób. Jeśli ten bit jest ustawiony, to
ABIDIFF_ABI_CHANGE Bit również musi być ustawiony. jeśli ABIDIFF_ABI_CHANGE jest ustawiony i
ABIDIFF_INCOMPATIBLE_CHANGE is NIE ustawiony, oznacza to, że porównywane ABI mogą
lub może nie być kompatybilny. W takim przypadku człowiek musi przejrzeć zmiany ABI
zdecydować, czy są kompatybilne, czy nie.

Pozostałe bity na razie nie są używane.

ZASTOSOWANIE PRZYKŁADY


1. Wykrywanie zmiany podtypu funkcji:

$ cat -n test-v0.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 struktura S0
5 {
6 cal m0;
7 };
8
9 pustka
10 foo(S0* /*nazwa_parametru*/)
11 {
12 // zrób coś z nazwa_parametru.
13}
$
$ cat -n test-v1.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 struktura typ_bazy
5 {
6 wstawionych;
7 };
8
9 struktura S0: publiczna baza_typów
10 {
11 cal m0;
12 };
13
14 pustka
15 foo(S0* /*nazwa_parametru*/)
16 {
17 // zrób coś z nazwa_parametru.
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
Podsumowanie zmian funkcji: 0 usunięto, 1 zmieniono, 0 dodano funkcję
Podsumowanie zmian zmiennych: 0 usunięto, 0 zmieniono, 0 dodano zmienną

1 funkcja z pewną pośrednią zmianą podtypu:

[C]'function void foo(S0*)' ma pewne pośrednie zmiany podtypów:
parametr 0 typu „S0*” ma zmiany podtypu:
we wskazanym typie „struct S0”:
rozmiar zmieniony z 32 na 64 bity
1 wstawienie klasy bazowej:
typ_struktury_podstawa
1 zmiana członka danych:
Zmieniono przesunięcie „int S0::m0” z 0 na 32
$

2. Wykrywanie kolejnej zmiany w podtypie funkcji:

$ cat -n test-v0.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 struktura S0
5 {
6 cal m0;
7 };
8
9 pustka
10 foo(S0& /*nazwa_parametru*/)
11 {
12 // zrób coś z nazwa_parametru.
13}
$
$ cat -n test-v1.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 struktura S0
5 {
6 znaków wstawiony_członek;
7 cal m0;
8 };
9
10 pustka
11 foo(S0& /*nazwa_parametru*/)
12 {
13 // zrób coś z nazwa_parametru.
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
Podsumowanie zmian funkcji: 0 usunięto, 1 zmieniono, 0 dodano funkcję
Podsumowanie zmian zmiennych: 0 usunięto, 0 zmieniono, 0 dodano zmienną

1 funkcja z pewną pośrednią zmianą podtypu:

[C]'function void foo(S0&)' ma pewne pośrednie zmiany podtypów:
parametr 0 typu „S0&” ma zmiany podtypu:
w referencyjnym typie „struct S0”:
rozmiar zmieniony z 32 na 64 bity
1 wstawienie członka danych:
'char S0::inserted_member', z przesunięciem 0 (w bitach)
1 zmiana członka danych:
Zmieniono przesunięcie „int S0::m0” z 0 na 32

$

3. Wykrywanie, że funkcje zostały usunięte lub dodane do biblioteki:

$ cat -n test-v0.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 struktura S0
5 {
6 cal m0;
7 };
8
9 pustka
10 foo(S0& /*nazwa_parametru*/)
11 {
12 // zrób coś z nazwa_parametru.
13}
$
$ cat -n test-v1.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 struktura S0
5 {
6 znaków wstawiony_członek;
7 cal m0;
8 };
9
10 pustka
11 bar(S0& /*nazwa_parametru*/)
12 {
13 // zrób coś z nazwa_parametru.
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
Podsumowanie zmian funkcji: 1 usunięto, 0 zmieniono, 1 dodano funkcje
Podsumowanie zmian zmiennych: 0 usunięto, 0 zmieniono, 0 dodano zmienną

1 Usunięta funkcja:
'funkcja pusta foo(S0&)' {_Z3fooR2S0}

1 Dodana funkcja:
'funkcja pusta kreska(S0&)' {_Z3barR2S0}

$

Korzystaj z abidiff online, korzystając z usług onworks.net



Najnowsze programy online dla systemów Linux i Windows