2010-04-21 46 views
5

Tôi có phương pháp đơn giản một lớp lót chết mà tôi không muốn thấy trong dấu vết ngăn xếp: có thể không? có thể đánh dấu nó bằng một thuộc tính?C#: làm cách nào để ẩn một phương thức khỏi ngăn xếp ngăn xếp?

Chỉ cần làm rõ, tôi không cố in dấu vết, hoặc làm lại hoặc có bước tự động thông qua trong trình gỡ lỗi. Tôi muốn phương thức không hiển thị trong dấu vết ở vị trí đầu tiên, bởi vì dấu vết sau đó được xử lý bởi một số mã của bên thứ ba. Tôi muốn kiểm soát thời gian chạy, tôi không quan tâm đến việc gỡ lỗi. Tôi đang nói điều này bởi vì hầu hết những gì tôi đã đọc trên StackTrace dường như là về các chủ đề này.

+0

Nếu nó là một lớp lót đơn giản thì nó sẽ tự động. Trình tối ưu hóa JIT sẽ nội tuyến nó. Nhưng không phải trong khi bạn đã có trình gỡ lỗi đính kèm. –

+0

Hans, xem bình luận của tôi cho câu trả lời của Steven. – benblo

+0

Đừng quên gắn cờ câu trả lời yêu thích của bạn ;-) – Steven

Trả lời

2

Điều này chỉ có thể được thực hiện khi phương pháp của bạn được gạch chân. Hoặc là JIT làm điều đó, hoặc bạn tự làm điều đó (thay đổi mã). Tuy nhiên, JIT khá bảo thủ về các phương thức nội tuyến và thực tế chỉ thực hiện điều đó khi phương thức này rất nhỏ, hoặc khi phương thức được sử dụng trong một vòng lặp.

+0

Hm ... thành thật mà nói, tôi nghi ngờ điều đó: ngay cả khi nó được gạch chân thì StackTrace vẫn theo dõi được không? Và, nó không kiểm tra trong thực tế kể từ khi phương pháp của tôi là có, cả hai trong gỡ lỗi và phát hành, và nó chỉ là một wrapper một dòng. – benblo

+1

Không. Khi phương pháp được gạch chân, nó thực sự biến mất. Không có lời gọi phương thức do đó, một chuyến đi bộ sẽ không tiết lộ nó. Bởi vì một dấu vết ngăn xếp được xây dựng bằng cách sử dụng một chồng đi bộ, theo dõi ngăn xếp sẽ không hiển thị phương pháp của bạn nữa. – Steven

-1

Như được nói trong câu trả lời cho câu hỏi khác Most Useful Attributes, bạn cần chỉ định thuộc tính System.Diagnostics.DebuggerHidden cho phương thức của mình.

+0

Thật không may là không áp dụng ở đây, như tên cho thấy (và các trạng thái tài liệu) nó chỉ là một thuộc tính trình gỡ rối, nó lên đến trình gỡ rối để lọc ra các phương thức đã đánh dấu, nhưng phương pháp vẫn được đăng ký trong ngăn xếp ngăn xếp địa điểm. Ngữ cảnh của tôi không phải là thời gian gỡ lỗi, điều này là dành cho Unity (công cụ trò chơi), dẫn đến toàn bộ các bản ghi hoặc ngoại lệ, vì vậy Unity sẽ phải lọc ra các phương pháp có chủ ý. Tôi sợ những gì tôi đang tìm kiếm để làm (không đăng ký trong ngăn xếp dấu vết ở tất cả) chỉ đơn giản là không thể. – benblo

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