COMPΞZ 🧬
خب! درود بر برنامهنویس عالم! چالش سی روزه رو آغاز میکنم 🫵🏼✍🏼 اما هدف آموزش نحوهٔ کدنویسی با C++23 و Solidity. شما هم میتونید نکته برداری کنید، منم هدفم اینه هرچی به روز رسانی کردم رو یادداشت کنم تا دوباره برای خودم مرور بشه. هیچ سخت نیست، تنهایی پیش…
ویژگی std::basic_stacktrace کلاسی است که در استاندارد ۲۳ معرفی شده و برای ثبت تصویری (اسنپ شات) از «پشته فراخوانی» یا همان «stack trace» فعلی به کار میرود. این اطلاعات میتواند برای اشکالزدایی (debugging) مفید باشد، زیرا به شما امکان میدهد تا دنبالهای از فراخوانی توابعی که به یک نقطه خاص در اجرای برنامه شما منجر شدهاند را مشاهده کنید.
همچنین با استفاده از تابع عضو استاتیک ()std::basic_stacktrace::current میتوانید پشته فراخوانی را در نقطهای که این تابع فراخوانی میشود ثبت کنید. از طرفی std::basic_stacktrace به عنوان یک مخزن عمل میکند که اطلاعات مربوط به هر فراخوانی تابع در پشته فراخوانی را نگه میدارد. این اطلاعات در اشیاء std::stacktrace_entry ذخیره میشوند.
با وجود اینکه std::basic_stacktrace مانند یک مخزن استاندارد با iterators و توابع دسترسی عمل میکند، اما عمدتاً از "مفاهیم انتقال (move semantics) و عملیات مربوط به دسترسی ثابت را پشتیبانی میکند.
این الگوی کلاس به شما اجازه میدهد تا یک تخصیصدهنده سفارشی برای مدیریت حافظه مشخص کنید، که میتواند در سناریوهای خاصی مانند سیستمهای تعبیهشده (embedded) مفید باشد.
در این مثال، تابع bar ابتدا تابع foo را فراخوانی میکند و سپس از std::basic_stacktrace::current برای چاپ پشته فراخوانی فعلی استفاده میکند. خروجی نشان میدهد که پشته فراخوانی شامل سه فریم است: bar، foo و main.
#cpp20 #cpp23 #basic_stacktrace #چالش #سیروزه #رمضان #روز_بیست_و_پنجم
همچنین با استفاده از تابع عضو استاتیک ()std::basic_stacktrace::current میتوانید پشته فراخوانی را در نقطهای که این تابع فراخوانی میشود ثبت کنید. از طرفی std::basic_stacktrace به عنوان یک مخزن عمل میکند که اطلاعات مربوط به هر فراخوانی تابع در پشته فراخوانی را نگه میدارد. این اطلاعات در اشیاء std::stacktrace_entry ذخیره میشوند.
با وجود اینکه std::basic_stacktrace مانند یک مخزن استاندارد با iterators و توابع دسترسی عمل میکند، اما عمدتاً از "مفاهیم انتقال (move semantics) و عملیات مربوط به دسترسی ثابت را پشتیبانی میکند.
این الگوی کلاس به شما اجازه میدهد تا یک تخصیصدهنده سفارشی برای مدیریت حافظه مشخص کنید، که میتواند در سناریوهای خاصی مانند سیستمهای تعبیهشده (embedded) مفید باشد.
import <print>;
import <stacktrace>;
auto foo() -> void {
std::println("Inside foo(){}");
bar();
}
auto bar() -> void {
std::println("Inside bar(){}");
// Print the stack trace
auto stacktrace = std::basic_stacktrace::current();
for (const auto& entry : stacktrace) {
std::println("{}", entry.function_name());
}
}
auto main() -> int {
foo();
}
در این مثال، تابع bar ابتدا تابع foo را فراخوانی میکند و سپس از std::basic_stacktrace::current برای چاپ پشته فراخوانی فعلی استفاده میکند. خروجی نشان میدهد که پشته فراخوانی شامل سه فریم است: bar، foo و main.
#cpp20 #cpp23 #basic_stacktrace #چالش #سیروزه #رمضان #روز_بیست_و_پنجم