2012-09-29 38 views
10

Tôi đang sử dụng (Apple) LLVM 4.1 trong Xcode 4.5 (nhưng tôi thấy điều tương tự trong bản beta trước đó). Tôi có nó nhắm mục tiêu C++ 11 và đang sử dụng libC++ (mới, C++ 11 kích hoạt, LLVM phiên bản của thư viện std).Trình gỡ lỗi bước sâu hơn khi cố gắng thoát khỏi C++ 11 std lib

Trong bản dựng gỡ lỗi, nếu tôi cố gắng bước mã lệnh gọi vào hàm thư viện std (ví dụ: std :: vector constructor) trình gỡ lỗi dừng trong quá trình triển khai lib std và nếu tôi cố gắng thực hiện bước đó ngay cả sâu sắc hơn! Có thể mất vài bước (đôi khi 10 hoặc nhiều hơn) trước khi tôi quay lại mã của riêng mình (và tôi chưa bao giờ muốn bước vào vị trí đầu tiên này).

Dường như luôn có macro _LIBCPP_DEBUG trong chế độ xem, cũng như _LIBCPP_INLINE_VISIBILITY - nhưng chúng dường như ở mọi nơi nên tôi không chắc đó là mối tương quan. Nó có vẻ hợp lý rằng nó có một cái gì đó để làm với cách nội tuyến đang làm việc, mặc dù.

Tôi không thể tìm thấy bất kỳ ví dụ nào về bất kỳ ai khác về vấn đề này - tuy nhiên, đối với tôi, nó vẫn tồn tại trên một số bản beta - trong bản phát hành - và thông qua cài đặt lại hoàn toàn hệ điều hành.

Có ai khác thậm chí đã xem điều này không? - nhưng tốt hơn vẫn biết chuyện gì đang xảy ra?

+0

Chưa nâng cấp mã XCode của tôi, nhưng khi gỡ lỗi mã đã được biên dịch trong chế độ phát hành, trình gỡ lỗi có thể hơi hoang dã một chút. Bạn có thấy điều này trong mã được biên dịch trong chế độ gỡ lỗi không? –

+0

Có, xin lỗi, có nghĩa là để nói đó là một bản dựng gỡ lỗi. Tôi đã chỉnh sửa câu hỏi để phản ánh điều đó. – philsquared

+0

Ngoài ra tôi khá chắc chắn rằng tôi đã nhìn thấy điều này trong một phiên bản beta của một phiên bản trước đó - 4.2 hoặc 4.3, có thể. Vào thời điểm đó tôi nghi ngờ đó chỉ là một điều beta và sẽ được sắp xếp theo bản phát hành (không, tôi đã không gửi một radar - tôi chỉ GTFO xem http://fixradarorgtfo.com). – philsquared

Trả lời

7

lldb trong Xcode 4.5 không xử lý bước trên các hàm nội tuyến. Thư viện chuẩn libC++ có nhiều hàm luôn được inline, ngay cả khi được xây dựng tại -O0, điều này làm cho vấn đề này trở thành một vấn đề. Có vẻ như Jim Ingham đã làm việc về điều này khoảng một tháng trước, ví dụ: xem bản vá đầu tiên http://llvm.org/viewvc/llvm-project?view=rev&revision=163044 và một số bản vá tiếp theo trong một hoặc hai tuần tiếp theo, nhưng tất nhiên những bản vá đó không có trong phiên bản phát hành của lldb. Bạn có thể xây dựng và sử dụng một phiên bản dòng lệnh của lldb từ trang web công cộng, http://lldb.llvm.org/ (xem cụ thể http://lldb.llvm.org/build.html), bit khó duy nhất là nhớ theo hướng dẫn ký mã trong lldb/docs/code-signing.txt.

+0

Cảm ơn (xin lỗi - không thấy câu trả lời của bạn trước đây). Nó làm cho tôi cảm thấy tốt hơn rằng nó không chỉ cho tôi. Nhưng thất vọng rằng không có cách giải quyết nào, hiện tại, điều đó không liên quan đến việc sử dụng lldb "không chính thức". Có vẻ như nó sẽ giải quyết kịp thời. – philsquared

+0

Hầu như Giáng sinh và vẫn có vấn đề này (hoặc có nó một lần nữa, dù bằng cách nào, vẫn rơi bóng trên Apple về điều này). – WhozCraig

+0

Xcode 4.5.x vẫn là phiên bản hiện đang được phát hành, do đó, có, hỗ trợ mã nội tuyến chưa có sẵn trong Xcode đã phát hành. Inlined bước hoạt động chính xác với các nguồn hiện tại của trình biên dịch và trình gỡ lỗi - vẫn còn các trường hợp góc mà bước vào một hàm std vào dịp nhưng những người đang xuống thông tin gỡ lỗi của trình biên dịch. –

1

Tôi đã nhìn thấy điều này quá, và không chỉ với libC++, cũng với libstdC++ (thư viện chuẩn GNU C++, được sử dụng bởi GCC và bằng clang trong C++ 03-mode). Tôi đã luôn luôn figured đó là do nội tuyến, mà tôi đoán đôi khi xảy ra trong gỡ lỗi xây dựng quá.

+0

Tôi phải thừa nhận tôi chưa bao giờ thấy nó ở chế độ C++ 03 - mà tôi sử dụng khá nhiều – philsquared

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