Tôi có ứng dụng OS X đa luồng sử dụng hỗn hợp C++, Objective-C và Swift.Cách theo dõi "libC++ abi.dylib: Hàm ảo thuần túy được gọi!" trong Xcode
Khi ứng dụng của tôi tắt, tôi thấy điều này trong cửa sổ gỡ lỗi Xcode:
libc++abi.dylib: Pure virtual function called!
Tôi biết rằng lỗi này thường được gây ra bởi một cuộc gọi đến một hàm ảo trong một lớp C++ constructor hoặc destructor.
Có cách nào dễ dàng để tìm vị trí của nó không? Bởi "dễ dàng", tôi có nghĩa là "không phân tích cây gọi cho mỗi dòng của mọi constructor và destructor của mỗi lớp có một chức năng ảo".
Tôi không thấy dấu vết ngăn xếp. Trình gỡ rối không dừng chương trình khi thông báo này được in. Một thông báo được ghi lại từ phương thức applicationDidTerminate
của đại biểu ứng dụng của bạn trước thông báo này.
Tôi đã thử thiết lập điểm ngắt trên "Tất cả ngoại lệ" nhưng tiếc là điểm ngắt được nhấn thường bằng mã sử dụng nhiều ngoại lệ. Có biểu tượng nào khác mà tôi có thể đặt điểm ngắt không?
có thể xem bất kỳ lớp nào gọi phương thức ảo trong hàm hủy của nó hoặc thực sự gọi bất kỳ phương thức nào trong hàm hủy - bởi vì các phương thức đó có thể tự gọi phương thức ảo. Trong destructor của một lớp cơ sở, lớp dẫn xuất không còn tồn tại, vì vậy các cuộc gọi hàm ảo sẽ thực hiện phiên bản của lớp cơ sở. –
Thông thường có một báo cáo nhật ký sự cố được tạo ra do lỗi đó là một ngoại lệ 'SIGABRT'. Trong trường hợp không có thì có thể tìm kiếm mã của bạn cho "ảo" và thiết lập các điểm ngắt của bạn trên mỗi; nó chỉ là một vấn đề của quá trình bằng cách loại bỏ. –
Đặt điểm ngắt trên '__cxa_pure_virtual' –