2010-02-28 5 views
7

Tôi đã viết một chuyển đổi LLVM về cơ bản thay thế mallocs bằng loại mallocs bảo vệ và một số công cụ khác.Tại sao các biểu tượng gỡ lỗi bị mất trong quá trình biên dịch/liên kết LLVM?

Tôi đang sử dụng lệnh clang (hoặc llvm-gcc) để biên dịch tệp c để nhận tệp bitcode (sử dụng tùy chọn -emit-llvm) chứa thông tin gỡ lỗi. Chúng cũng chứa tên phương thức, số dòng, v.v.

Sau đó, tôi sử dụng tùy chọn để thiết lập tệp bitcode này. Kết quả là một tệp bitcode được thiết bị, vẫn chứa tất cả các thông tin gỡ lỗi có liên quan.

Trong bước thứ ba và cuối cùng, vì chúng tôi cần một số lib thời gian chạy, chúng tôi liên kết bitcode với một số tệp bitcode khác bằng cách sử dụng llvm-gcc để nhận tệp nhị phân cuối cùng.

nhị phân này tôi không thể gỡ lỗi vì nó không chứa bất kỳ thông tin gỡ lỗi mặc dù tất cả các tệp bitcode được liên kết đã chứa chúng. Điều duy nhất gdb có thể cho tôi biết là chúng ta đang ở đâu nhưng không có số dòng và ...

Tôi sẽ biết ơn vì bất kỳ gợi ý nào.

+0

Bạn có chuyển qua tất cả các bước chấp nhận không? – bmargulies

+0

Đặc biệt là bước cuối cùng llvm-gcc: Nếu không -g sẽ không được chuyển đến trình liên kết. –

+3

Có, tôi đang thêm tùy chọn -g cho tất cả các bước ... –

Trả lời

1

Khi tôi hiểu bạn đang chạy tối ưu hóa (công cụ chọn cũng tối ưu hóa mã và thông tin gỡ lỗi). Vì vậy, có thể là phần thiếu mà bạn muốn xem khi gỡ lỗi là kết quả của thông tin gỡ lỗi được tối ưu hóa?

P.S. Tôi sẽ thêm điều này vào nhận xét, nhưng rất tiếc là tôi không có 50 danh tiếng cần thêm nhận xét.