2010-09-27 39 views

Trả lời

8

đây không phải là câu hỏi C#/java/C++. Làm thế nào nó hoạt động nội bộ, làm thế nào dòng biết để đi bắt tuyên bố.

Cách thức hoạt động bên trong làm cho câu hỏi này C#/java/C++ khá nhiều (vì nó sẽ được triển khai khác nhau).

Trong Java, khối thử tự cài đặt vào bảng đặc biệt (trong tệp lớp). Khi JVM đưa ra một ngoại lệ, nó nhìn vào bảng đó để xem nơi bắt giữ tiếp theo hoặc cuối cùng là khối để đi đến là.

6

Khi ngoại lệ xảy ra, lệnh đặc biệt được thực hiện (thường được gọi là ngắt). Điều này dẫn đến việc thực hiện một trình xử lý lỗi chung mà suy ra đó là trình xử lý ngoại lệ phù hợp được cài đặt mới nhất. Trình xử lý đó sau đó được thực hiện.

+0

đó là tất cả được biết .. xử lý con thực hiện đầu tiên .. Tôi đang mong đợi câu trả lời từ phần mềm hệ thống/lắp ráp /.net framework – selvaraj

+0

bạn có thể giải thích rằng hướng dẫn đặc biệt mà bạn nghĩ là – selvaraj

+2

@saj: Trong các chương trình C++ gốc, một lệnh xử lý đặc biệt 'int' được sử dụng, được thực thi và dừng chương trình và sau đó điều khiển sẽ tự động được chuyển đến bộ xử lý ngắt hệ điều hành lần lượt thấy rằng đó là một ngoại lệ C++ và chuyển điều khiển đến trình xử lý ngoại lệ C++. – sharptooth

0

nó nên làm việc trong tất cả các langues hơi như thế này:

if (error_occured xy while doing things in try){ 
    call_catch_part(error xy) 
} 
0

Nó là cơ bản phân tích nguyên tắc cơ bản của ngôn ngữ. Bạn có thể nhận tất cả thông tin tại Here

0

bạn có thể thực hiện tương tự trong C mặc dù không có xử lý ngoại lệ cho mỗi lần truy cập.

Ở đó bạn sẽ sử dụng setjmp/longjmp tiếc là sau đó bạn không nhận được thư giãn thư giãn và phải xử lý tất cả các nitty-gritty mình.

5

Có sự khác biệt cách ngoại lệ được xử lý kỹ thuật giữa các ngôn ngữ được biên dịch tự nhiên như C++ và ngôn ngữ sử dụng mã byte đang được thực hiện trên máy ảo như Java hoặc C#.

Trình biên dịch C++ thường tạo mã giao thức thông tin cần thiết để xử lý ngoại lệ khi chạy. Một cấu trúc dữ liệu chuyên dụng được sử dụng để ghi nhớ lối vào/thoát của các khối thử và trình xử lý ngoại lệ liên quan. Khi một ngoại lệ xảy ra, một ngắt được tạo ra và điều khiển được truyền cho hệ điều hành mà lần lượt kiểm tra ngăn xếp cuộc gọi và xác định trình xử lý ngoại lệ cần gọi.

Thông tin chi tiết được giải thích khá tốt trong bài viết sau bởi Vishal Kochhar:

How a C++ compiler implements exception handling

Trong Java hay .NET không có nhu cầu sử dụng chi phí của việc duy trì ngoại lệ xử lý thông tin khi thời gian chạy sẽ có thể xem xét mã byte để tìm trình xử lý ngoại lệ có liên quan. Kết quả là, chỉ có các ngoại lệ thực sự được ném đang gây ra một chi phí.

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