Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Biểu tượng yêu thích OnWorks

abidiff - Trực tuyến trên đám mây

Chạy abidiff trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS

Đây là abidiff lệnh có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


abidiff - so sánh ABI của các tệp ELF

abidiff so sánh các Giao diện nhị phân ứng dụng (ABI) của hai thư viện được chia sẻ trong ELF
định dạng. Nó phát ra một báo cáo có ý nghĩa mô tả sự khác biệt giữa hai ABI.

Đối với một báo cáo thay đổi ABI toàn diện bao gồm các thay đổi về hàm và biến
loại phụ, hai thư viện chia sẻ đầu vào phải được đi kèm với thông tin gỡ lỗi của chúng
in lùn định dạng. Nếu không, chỉ ELF các biểu tượng đã được thêm vào hoặc loại bỏ được báo cáo.

MỜI


abidiff [tùy chọn]

LỰA CHỌN


· --Cứu giúp | -h

Hiển thị một trợ giúp ngắn về lệnh và thoát.

· --phiên bản | -v

Hiển thị phiên bản của chương trình và thoát.

· --debug-thông tin-dir1 | --d1 <di-path1>

Đối với các trường hợp thông tin gỡ lỗi cho thư viện chia sẻ đầu tiên được chia thành một
tệp riêng biệt, nói với chấp hành viên nơi để tìm tệp thông tin gỡ lỗi riêng biệt đó.

Lưu ý rằng đường đi phải trỏ đến thư mục gốc chứa thông tin gỡ lỗi
được sắp xếp theo kiểu cây. Trong hệ thống dựa trên Red Hat, thư mục đó là
thường / usr / lib / debug.

Cũng lưu ý rằng tùy chọn này không bắt buộc đối với thông tin gỡ lỗi tách được cài đặt bởi
trình quản lý gói hệ thống của bạn bởi vì sau đó chấp hành viên biết tìm nó ở đâu.

· --debug-thông tin-dir2 | --d2 <di-path2>

Như --debug-thông tin-dir1, tùy chọn này cho biết chấp hành viên nơi để tìm gỡ lỗi tách
thông tin cho thư viện chia sẻ thứ hai tập tin.

· --Stat

Thay vì hiển thị sự khác biệt chi tiết về ABI giữa thư viện chia sẻ đầu tiên
thư viện chia sẻ thứ hai, chỉ hiển thị một số thống kê tóm tắt về những khác biệt này.

· --symtabs

Chỉ hiển thị các bảng ký hiệu của thư viện chia sẻ đầu tiênthư viện chia sẻ thứ hai.

· --deleted-fns

Trong báo cáo kết quả về sự khác biệt giữa thư viện chia sẻ đầu tiên
thư viện chia sẻ thứ hai, chỉ hiển thị các chức năng được xác định chung đã bị xóa
từ thư viện chia sẻ đầu tiên.

· --changed-fns

Trong báo cáo kết quả về sự khác biệt giữa thư viện chia sẻ đầu tiên
thư viện chia sẻ thứ hai, chỉ hiển thị những thay đổi trong các kiểu con của các hàm chung
được định nghĩa trong thư viện chia sẻ đầu tiên.

· --add-fns

Trong báo cáo kết quả về sự khác biệt giữa thư viện chia sẻ đầu tiên
thư viện chia sẻ thứ hai, chỉ hiển thị các chức năng được xác định chung đã được thêm vào
thư viện chia sẻ thứ hai.

· --deleted-vars

Trong báo cáo kết quả về sự khác biệt giữa thư viện chia sẻ đầu tiên
thư viện chia sẻ thứ hai, chỉ hiển thị các biến được xác định toàn cục đã bị xóa
từ thư viện chia sẻ đầu tiên.

· --changed-vars

Trong báo cáo kết quả về sự khác biệt giữa thư viện chia sẻ đầu tiên
thư viện chia sẻ thứ hai, chỉ hiển thị những thay đổi trong các loại phụ của toàn cục
các biến được xác định trong thư viện chia sẻ đầu tiên

· --add-vars

Trong báo cáo kết quả về sự khác biệt giữa thư viện chia sẻ đầu tiên
thư viện chia sẻ thứ hai, chỉ hiển thị các biến toàn cục đã được thêm (xác định) vào
thư viện chia sẻ thứ hai.

· --no-tên liên kết

Trong báo cáo kết quả, không hiển thị tên liên kết của các
các hàm hoặc biến đã thay đổi.

· --no-show-locs
Không hiển thị thông tin về nơi trong 2 chia sẻ thư viện tương ứng
loại đã được thay đổi.

· - không-không-không-tham-chiếu-biểu-tượng

Trong báo cáo kết quả, không hiển thị thông tin thay đổi về chức năng và
các ký hiệu biến không được tham chiếu bởi bất kỳ thông tin gỡ lỗi nào. Lưu ý rằng đối với
các ký hiệu này không được tham chiếu bởi bất kỳ thông tin gỡ lỗi nào, thông tin thay đổi
hiển thị là các biểu tượng được thêm vào hoặc bị loại bỏ.

· - ức chế | --suppr <con đường để đàn áp>

Sử dụng tệp thông số kỹ thuật ngăn chặn có tại con đường để đàn áp. Lưu ý rằng điều này
tùy chọn có thể xuất hiện nhiều lần trên dòng lệnh; tất cả sự đàn áp
các tệp thông số kỹ thuật sau đó được tính đến.

· --rơi vãi <biểu thức chính quy>

Khi đọc thư viện chia sẻ đầu tiênthư viện chia sẻ thứ hai Tệp đầu vào ELF, thả
các hàm và biến được xác định toàn cục có tên phù hợp với biểu thức chính quy
biểu thức chính quy. Do đó, không có thay đổi nào liên quan đến các hàm hoặc biến này sẽ được tạo ra
trong báo cáo khác biệt.

· --drop-fn <biểu thức chính quy>

Khi đọc thư viện chia sẻ đầu tiênthư viện chia sẻ thứ hai Tệp đầu vào ELF, thả
các hàm được xác định toàn cục mà tên phù hợp với biểu thức chính quy biểu thức chính quy. Như một
kết quả là không có thay đổi nào liên quan đến các chức năng này sẽ được đưa ra trong báo cáo khác biệt.

· --drop-var <biểu thức chính quy>

Khi đọc thư viện chia sẻ đầu tiênthư viện chia sẻ thứ hai Tệp đầu vào ELF, thả
các biến được xác định toàn cục khớp với một biểu thức chính quy biểu thức chính quy.

· --giữ cho <biểu thức chính quy>

Khi đọc thư viện chia sẻ đầu tiênthư viện chia sẻ thứ hai Tệp đầu vào ELF, giữ lại
các hàm và biến được xác định toàn cục mà tên phù hợp với biểu thức chính quy
biểu thức chính quy. Tất cả các hàm và biến khác đều bị loại bỏ trên sàn và do đó sẽ không
xuất hiện trong báo cáo khác biệt kết quả.

· --giữ-fn <biểu thức chính quy>

Khi đọc thư viện chia sẻ đầu tiênthư viện chia sẻ thứ hai Tệp đầu vào ELF, giữ lại
các hàm được xác định toàn cục mà tên phù hợp với biểu thức chính quy biểu thức chính quy. Tất cả
các chức năng khác bị rơi trên sàn và do đó sẽ không xuất hiện trong kết quả
báo cáo khác.

· --keep-var <biểu thức chính quy>

Khi đọc thư viện chia sẻ đầu tiênthư viện chia sẻ thứ hai Tệp đầu vào ELF, giữ lại
được xác định toàn cục tên nào phù hợp với biểu thức chính quy biểu thức chính quy. Tất cả khác
các biến bị bỏ sàn và do đó sẽ không xuất hiện trong kết quả khác
báo cáo.

· - không hề hấn gì

Trong báo cáo khác biệt, chỉ hiển thị những thay đổi vô hại. Theo mặc định, vô hại
các thay đổi được lọc ra khỏi báo cáo khác biệt, giữ cho sự lộn xộn ở mức tối thiểu và có
thay đổi lớn hơn để phát hiện các vấn đề ABI thực sự.

· - không có hại

Trong báo cáo khác biệt, không hiển thị các thay đổi có hại. Theo mặc định, chỉ có hại
các thay đổi được hiển thị trong báo cáo khác biệt.

· --dư thừa

Trong báo cáo khác biệt, hãy hiển thị các thay đổi thừa. Một thay đổi thừa là một thay đổi
đã được hiển thị ở nơi khác trong báo cáo.

· - không dư thừa

Trong báo cáo khác, làm KHÔNG hiển thị các thay đổi thừa. Một thay đổi thừa là một thay đổi
đã được hiển thị ở nơi khác trong báo cáo. Tùy chọn này được bật bởi
mặc định.

· - không có kiến ​​trúc

Không tính đến kiến ​​trúc khi so sánh ABI.

· --dump-diff-cây
Sau báo cáo khác biệt, phát ra một bản trình bày dạng văn bản của cây các nút khác biệt được sử dụng bởi
công cụ so sánh để biểu diễn các chức năng và biến đã thay đổi. Điều đó
biểu diễn được phát ra đầu ra lỗi cho mục đích gỡ lỗi. Lưu ý rằng
cây khác biệt này chỉ liên quan đến các hàm và biến có một số kiểu con
những thay đổi. Các hàm và biến được thêm vào hoặc loại bỏ không có bất kỳ cây nút khác biệt nào
liên kết với họ.

· --thống kê

Đưa ra số liệu thống kê về những thứ bên trong khác nhau.

· --dài dòng

Gửi nhật ký dài dòng về tiến trình của những thứ linh tinh bên trong.

TRỞ VỀ GIÁ TRỊ


Mã thoát của chấp hành viên lệnh bằng 0 nếu ABI của các mã nhị phân được so sánh
bằng nhau hoặc khác không nếu chúng khác nhau hoặc nếu công cụ gặp lỗi.

Trong trường hợp sau, mã lối ra là một trường bit rộng 8 bit, trong đó mỗi bit có một
ý nghĩa cụ thể.

Bit đầu tiên, có giá trị 1, được đặt tên là ABIDIFF_ERROR có nghĩa là có một lỗi.

Bit thứ hai, có giá trị 2, được đặt tên là ABIDIFF_USAGE_ERROR có nghĩa là có một lỗi trong cách
người dùng đã gọi công cụ. Chẳng hạn, nó có thể được đặt nếu người dùng gọi công cụ
với một chuyển đổi dòng lệnh không xác định, với một số hoặc đối số sai, v.v. Nếu bit này là
thiết lập, sau đó ABIDIFF_ERROR bit cũng phải được thiết lập.

Bit thứ ba, có giá trị 4, được đặt tên là ABIDIFF_ABI_CHANGE nghĩa là ABI của các mã nhị phân
so sánh là khác nhau.

Bit thứ tư, có giá trị 8, được đặt tên là ABIDIFF_ABI_INCOMPATIBLE_CHANGE nghĩa là ABI của
nhị phân được so sánh là khác nhau theo cách không tương thích. Nếu bit này được đặt, thì
ABIDIFF_ABI_CHANGE bit cũng phải được thiết lập. Nếu ABIDIFF_ABI_CHANGE được thiết lập và
ABIDIFF_INCOMPATIBLE_CHANGE is KHÔNG đặt, thì điều đó có nghĩa là ABI được so sánh có thể
hoặc có thể không tương thích. Trong trường hợp đó, một con người cần phải xem xét các thay đổi ABI
để quyết định xem chúng có tương thích hay không.

Các bit còn lại không được sử dụng trong thời điểm này.

SỬ DỤNG VÍ DỤ


1. Phát hiện sự thay đổi trong kiểu con của một hàm:

$ con mèo -n thử nghiệm-v0.cc
1 // Biên dịch cái này với:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 cấu trúc S0
5 {
6 intm0;
7};
8
9 khoảng trống
10 foo (S0 * / * tên_tham_số * /)
11 {
12 // làm một cái gì đó với tên_tham_số.
13}
$
$ con mèo -n thử nghiệm-v1.cc
1 // Biên dịch cái này với:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 cấu trúc type_base
5 {
6 int được chèn vào;
7};
8
9 struct S0: public type_base
10 {
11 intm0;
12};
13
14 khoảng trống
15 foo (S0 * / * tên_tham_số * /)
16 {
17 // làm một cái gì đó với tên_tham_số.
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
Tóm tắt thay đổi chức năng: 0 Đã xóa, 1 Đã thay đổi, 0 Đã thêm chức năng
Tóm tắt thay đổi biến: 0 Đã xóa, 0 Đã thay đổi, 0 Đã thêm biến

1 chức năng với một số thay đổi kiểu con gián tiếp:

[C] 'function void foo (S0 *)' có một số thay đổi kiểu con gián tiếp:
tham số 0 của kiểu 'S0 *' có các thay đổi kiểu con:
được trỏ tới kiểu 'struct S0':
kích thước thay đổi từ 32 thành 64 bit
Chèn 1 lớp cơ sở:
cấu trúc type_base
1 thay đổi thành viên dữ liệu:
Độ lệch 'int S0 :: m0' đã thay đổi từ 0 thành 32
$

2. Phát hiện một thay đổi khác trong kiểu con của một hàm:

$ con mèo -n thử nghiệm-v0.cc
1 // Biên dịch cái này với:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 cấu trúc S0
5 {
6 intm0;
7};
8
9 khoảng trống
10 foo (S0 & / * tên_tham_số * /)
11 {
12 // làm một cái gì đó với tên_tham_số.
13}
$
$ con mèo -n thử nghiệm-v1.cc
1 // Biên dịch cái này với:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 cấu trúc S0
5 {
6 ký_lục_được chèn vào;
7 intm0;
8};
9
10 khoảng trống
11 foo (S0 & / * tên_tham_số * /)
12 {
13 // làm một cái gì đó với tên_tham_số.
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
Tóm tắt thay đổi chức năng: 0 Đã xóa, 1 Đã thay đổi, 0 Đã thêm chức năng
Tóm tắt thay đổi biến: 0 Đã xóa, 0 Đã thay đổi, 0 Đã thêm biến

1 chức năng với một số thay đổi kiểu con gián tiếp:

[C] 'function void foo (S0 &)' có một số thay đổi kiểu con gián tiếp:
tham số 0 của kiểu 'S0 &' có các thay đổi kiểu phụ:
trong loại được tham chiếu 'struct S0':
kích thước thay đổi từ 32 thành 64 bit
Chèn 1 thành viên dữ liệu:
'char S0 :: insert_member', ở độ lệch 0 (tính bằng bit)
1 thay đổi thành viên dữ liệu:
Độ lệch 'int S0 :: m0' đã thay đổi từ 0 thành 32

$

3. Phát hiện rằng các chức năng đã bị xóa hoặc được thêm vào thư viện:

$ con mèo -n thử nghiệm-v0.cc
1 // Biên dịch cái này với:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 cấu trúc S0
5 {
6 intm0;
7};
8
9 khoảng trống
10 foo (S0 & / * tên_tham_số * /)
11 {
12 // làm một cái gì đó với tên_tham_số.
13}
$
$ con mèo -n thử nghiệm-v1.cc
1 // Biên dịch cái này với:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 cấu trúc S0
5 {
6 ký_lục_được chèn vào;
7 intm0;
8};
9
10 khoảng trống
11 thanh (S0 & / * tên_tham_số * /)
12 {
13 // làm một cái gì đó với tên_tham_số.
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
Tóm tắt các thay đổi về chức năng: 1 Đã loại bỏ, 0 Đã thay đổi, 1 Chức năng được thêm vào
Tóm tắt thay đổi biến: 0 Đã xóa, 0 Đã thay đổi, 0 Đã thêm biến

1 chức năng đã loại bỏ:
'function void foo (S0 &)' {_Z3fooR2S0}

1 chức năng được thêm vào:
'thanh void chức năng (S0 &)' {_Z3barR2S0}

$

Sử dụng abidiff trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

Lệnh Linux

Ad