Tôi không chắc chắn rằng các tiêu chuẩn ngôn ngữ C hoặc C++ nói về hướng dẫn; bạn có thể hình dung chạy một chương trình C được biên dịch để được thực hiện bởi một nhóm lớn nô lệ của con người (nhưng điều đó sẽ là phi đạo đức, ngay cả khi tuân thủ tiêu chuẩn). Bạn có thể tự mình chạy một chương trình nhỏ đơn giản bằng bút chì và giấy, bạn có thể sử dụng trình thông dịch C, v.v. ...
Trình biên dịch C hoặc C++ tối ưu cũng sẽ dịch một số câu lệnh C thành nhiều lệnh máy nằm ở những nơi khác nhau (đặc biệt, các trình biên dịch thực hiện các chức năng nội dòng hoặc sao chép hoặc thậm chí là các khối cơ bản, ngay cả khi không có bất kỳ từ khóa inline
nào trong mã nguồn).
Trên hầu hết hệ thống, bạn có thể viết mã (ví dụ trong lắp ráp) một thường trình trả về khi con trỏ đánh giá địa chỉ trả về của nó (tức là địa chỉ của người gọi).
Với GCC (và trình biên dịch tương thích, có lẽ là Clang/LLVM), bạn có thể sử dụng __builtin_return_address và các nội trang có liên quan.
Gnu Libc trên Linux cung cấp cho bạn backtrace (nhưng tôi đã được diappointed bởi nó, khi tôi cố gắng).
Chú ý rằng những thủ thuật có thể không hoạt động khi biên dịch với -fno-frame-pointer
Bạn cũng có thể xem xét tùy GCC ví dụ với các plugin hoặc các tiện ích mở rộng MELT (MELT là một ngôn ngữ cụ thể của miền, được triển khai như một plugin GPLv3 cho GCC, để mở rộng GCC dễ dàng hơn với các plugin được mã hóa trong C). GCC được tùy chỉnh của bạn có thể chèn các cuộc gọi đến các chức năng thiết bị đo đạc ở những nơi thích hợp.
Nguồn
2012-07-17 20:56:01
Tại sao bạn hỏi? –
C++ không bắt buộc phải được thực hiện với hướng dẫn. –
Hi Basile, tôi hiện đang thực hiện một số nghiên cứu về các tính năng chỉ dẫn/xem dữ liệu. – nigong