2012-06-15 19 views
5

Tôi đang cố gắng xem mã nguồn của Wireshark để hiểu phân tích giao thức, nhưng tôi thấy rằng khi tôi chỉ sử dụng gdb ./wireshark, khi tôi báo chí Ctrl + C và đặt điểm ngắt, sau đó nhập C, quá trình này bị chết. Tôi muốn biết những gì libtool không làm cho GDB gỡ lỗi có thể.lý do tại sao tôi phải sử dụng libtool --mode == thực thi gdb wireshark để làm cho nó có thể gỡ lỗi wireshark

Tôi đã đọc man libtool và nó nói libtool là một công cụ giúp bạn dễ dàng sử dụng tất cả các loại .a hoặc .o bằng một giao diện đơn giản, nhưng tôi không biết những gì chính là để làm cho gdb wireshark thể với libtool.

Trả lời

5

Khi bạn sử dụng libtool để xây dựng một chương trình, nó sẽ xử lý tất cả các khó khăn và đặc thù của việc sử dụng thư viện được chia sẻ trong nền tảng của bạn.

Một trong những khó khăn là gỡ lỗi, vì khi gỡ lỗi bạn muốn tải thư viện được chia sẻ không được cài đặt trong hệ thống (chúng vừa được biên dịch). Vì vậy, khi libtool xây dựng một file thực thi, nó sẽ chuyển nó vào một thư mục ẩn (.libs) và thường sẽ đặt một kịch bản hoặc tương tự với cùng tên mà bạn có thể thấy nó. Kịch bản này sẽ làm tất cả các phép thuật để chạy chương trình chính xác với các thư viện chính xác.

Nhưng rõ ràng bạn không thể gỡ lỗi tập lệnh bằng gdb! Vì vậy, để vượt qua các thông số chính xác cho gdb cho nó để có thể gỡ lỗi chương trình đúng với các thư viện đúng, bạn phải chạy lệnh:

$ libtool --mode=execute gdb ./wireshark 

Bạn có thể thấy những gì nó làm bằng cách chạy:

$ libtool --mode=execute echo ./wireshark 

Chỉ không sử dụng các tệp từ .libs trực tiếp: sử dụng luôn libtool hoặc tập lệnh trình bao bọc.

+0

cảm ơn bạn :) nó rất hữu ích –

+0

Điều đó không hiệu quả. Tôi đã thử 'libtool e echo binary' trong một thư mục và nó in'/path/to/.libs/binary' chạy nó trực tiếp không đưa ra kết quả mong đợi, cũng không 'libtool e /path/to/.libs/binary '. Dường như có nhiều phép thuật hơn các biến 'echo' và môi trường có thể tiết lộ. –

+0

@ PavelŠimerda: Tất nhiên có nhiều phép thuật hơn thế. Nếu không, 'libtool' sẽ là vô nghĩa! Nếu bạn muốn debug chỉ cần 'libtool e gdb binary'. Không sử dụng các tệp từ '.libs' cho bất kỳ điều gì nghiêm trọng. Nhưng nếu bạn muốn khám phá ... hãy tiếp tục, nhưng hãy nhớ rằng libtool rất, rất phức tạp. – rodrigo

Các vấn đề liên quan