Tôi biết về this question, nhưng có vẻ như nó không hoạt động đối với tôi.Làm thế nào để liên kết với các phiên bản gỡ lỗi của libc và libstdC++ trong GCC?
Đối với việc thiết lập, hãy C đơn giản chương trình ++, hw.cpp
, được cho bởi: int main() { }
Khi biên soạn với g++ -o hw hw.cpp -O0 -g
trên Linux, chạy ldd ./hw
cho:
linux-gate.so.1 => (0x003e5000)
libstdc++.so.6 => /usr/local/lib/libstdc++.so.6 (0x007c5000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x006a4000)
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x00a40000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00a93000)
/lib/ld-linux.so.2 (0x00a0f000)
Bây giờ tôi cũng xuất hiện để có các thư viện debug trong /usr/lib/debug/lib/tls/i686/cmov/
, mà tôi tưởng tượng là các bản dựng gỡ lỗi tương ứng của các thư viện hệ thống.
Câu hỏi: Làm thế nào để biên dịch chương trình của tôi để nó được liên kết chống lại debug xây dựng của C và/hoặc C++ thư viện chuẩn, libc
/libm
/libstdc++
, chia sẻ hoặc tĩnh? Đối với việc xây dựng được chia sẻ, tôi muốn đầu ra của ldd ./hw
để trỏ đến thư mục gỡ lỗi.
(Bối cảnh: Một trong các thư viện chia sẻ được sử dụng bởi dự án của tôi được báo cáo là bị rò rỉ ("vẫn có thể truy cập") bởi Valgrind, nhưng nguồn gốc không nằm trong thư viện chia sẻ bản thân, nhưng trong dlopen loại mã (see here ..) Vì vậy, tôi figured rằng nếu tôi có thể bước qua _Start()
gọi trong CRT tôi có thể có thể theo dõi các thủ phạm)
cập nhật/Correction: tôi nghĩ tôi chỉ là rất, rất ngu ngốc - debug thư viện có lẽ luôn luôn được liên kết như mong muốn tất cả cùng. Tôi đã nhầm lẫn bởi trình gỡ lỗi không hiển thị bất cứ điều gì trong khi bước, đó là bởi vì tôi không có mã nguồn cho các thư viện.
Cập nhật II: OK, hãy cập nhật trước đó. Tôi có nguồn thư viện ngay bây giờ, nhưng trong khi đúng là thư viện chuẩn gửi kèm gỡ lỗi biểu tượng, tôi dường như không có một lỗi riêng biệt xây dựng. Có phải một bản dựng sẵn có không và tôi sẽ liên kết với nó như thế nào?
Bạn có thể biết rằng một số triển khai thư viện chuẩn sử dụng các hồ bơi để phân bổ nhanh? http://valgrind.org/docs/manual/faq.html#faq.undeferrors –
@honk: Tôi hoàn toàn vui khi chấp nhận rằng đây không phải là lo lắng thực sự. Nó chỉ làm phiền tôi là mã của bên thứ ba có thể gây ra các cảnh báo trong mã * my * (lưu ý cách chỉ có các tham chiếu đến một số giả mạo '.c' tập tin mà tôi không thực sự có, * không * để một thư viện được chia sẻ) mà tôi dường như không thể ngăn chặn ... Ít nhất với một CRT gỡ lỗi tôi hy vọng sẽ có được một cái nhìn tốt hơn. –