2008-09-17 39 views

Trả lời

3

Do tín hiệu và ngoại lệ hoạt động, bạn không thể thực hiện ngay khi tín hiệu được ném - ngoại lệ dựa trên các khía cạnh nhất định của ngăn xếp không đúng khi xử lý tín hiệu.

Bạn có thể đặt biến toàn cầu trong trình xử lý tín hiệu, sau đó kiểm tra điều này tại các điểm chính trong chương trình và ném ngoại lệ nếu được đặt. Tuy nhiên, điều này không cung cấp cho bạn thông tin chính xác về ngoại lệ được ném.

+0

Bạn có thể tính toán và lưu trữ stack trace trong xử lý tín hiệu sử dụng backtrace_symbols, đó có ít nhất mang đến cho bạn một stack trace hoàn tất. –

1

Tôi không có một giải pháp làm sẵn sàng, nhưng có một điều bạn có thể nhìn vào là signals (không chắc chắn cho dù bạn có thể ném một cách an toàn ngoại lệ C++ từ họ, nhưng nó sẽ giúp cho gỡ lỗi anyway.)

Bạn có thể cài đặt trình xử lý tín hiệu cho SIGFPE và sử dụng nó cho mục đích gỡ lỗi của bạn.

0

Ý tưởng cơ bản sẽ giúp bạn cài đặt các trình xử lý tín hiệu thích hợp cho các ngoại lệ dấu phẩy động. Bên trong trình xử lý tín hiệu của bạn, bạn có thể ném một ngoại lệ (hoặc gửi một tín hiệu do người dùng định nghĩa đến một tiến trình khác sẽ làm tăng ngoại lệ, hoặc gửi một thông điệp tới một luồng khác cho một thứ tương tự, v.v. v.v.). Có nhiều cách để thực sự ném ngoại lệ - điều chính là xử lý tín hiệu.

3

tùy chọn gcc -chú-gọi-ngoại lệ có thể là một số sử dụng cho bạn. Không thể tìm thấy bất kỳ tài liệu nào về nó mặc dù vậy số dặm của bạn có thể thay đổi.

8

Nếu C++ tiêu chuẩn thư viện thực hiện hỗ trợ các chức năng TR1 fetestexcept, feraiseexceptfeclearexcept (mỏ vẫn chưa vì vậy tôi không thể kiểm tra điều này), bạn có thể phát hiện năm loại lỗi dấu chấm động và sau đó bạn có thể ném bất cứ điều gì ngoại lệ bạn muốn.

Xem here để biết mô tả về các chức năng này.

Tôi cũng đề nghị phần 12.3, "Quản lý môi trường điểm nổi" của cuốn sách Phần mở rộng thư viện chuẩn C++: Hướng dẫn và tham chiếu bởi Pete Becker, ISBN-13: 9780321412997, để có mô tả tuyệt vời về các chức năng này với mã mẫu.

alt text http://ak.buy.com/db_assets/prod_images/225/202452225.jpg