اگرچه ممکن است در ابتدا گیج کننده به نظر برسد، اما ردیابی پشته می تواند کلیدهای عیب یابی سریع و موثر را نگه دارد.
ردیابی پشته (یا ردیابی) خروجی است که پشته متد برنامه شما را نشان می دهد. هنگامی که برنامه شما با خطا مواجه می شود، معمولاً یکی را در ترمینال خود می بینید.
همانطور که از نام آن پیداست، یک ساختار داده پشته ای متدها را در یک stack trace ذخیره می کند. روشی که در آن اجرای برنامه شروع می شود در پایین پشته است در حالی که روشی که ردیابی پشته را تولید می کند در بالا است.
هنگامی که کد خود را اشکال زدایی می کنید، ردیابی پشته می تواند بسیار مفید باشد.
چرا Stack Trace مهم است؟
ردیابی پشته یک ابزار اشکال زدایی مهم است. اطلاعات دقیقی مانند نوع خطا، روشی که در آن رخ داده است، خط کد شما که در آن رخ داده و مسیر فایل را به شما می دهد.
برای یک برنامه نویس باتجربه، این اطلاعات معدن طلایی برای درک اینکه دقیقاً چه چیزی و کجا اشتباه شده است.
به عنوان یک برنامه نویس، شما همچنین می توانید از برنامه خود بخواهید که در صورت تقاضا یک stack trace ایجاد کند. این می تواند به ویژه برای نگهداری کد و عیب یابی مفید باشد.
نحوه خروجی گرفتن Stack Trace
بسته به نسخه کامپایلر خود، به احتمال زیاد یک ردیابی قابل خواندن دریافت خواهید کرد. یک ردیابی قابل خواندن متنی کاربرپسند در مورد خطا ارائه می دهد، برخلاف ردیابی عادی. این به ویژه برای کامپایلرهای جدید صادق است. بنابراین، بهترین راه برای یادگیری در مورد ردیابی پشته این است که خودتان یکی را تولید کنید.
شما می توانید بدون اینکه هیچ خطایی در کد خود داشته باشید، یک ردیابی پشته تولید کنید. برای انجام این کار، به سادگی از متد dumpStack از کلاس java.lang.Thread استفاده کنید. تمام متدهایی که فراخوانی شده اند را نشان می دهد، درست از روشی که dumpStack را فراخوانی می کند. روش فراخوانی روشی خواهد بود که در بالای ساختار داده پشته قرار دارد.
در اینجا یک نمونه برنامه وجود دارد که به صراحت یک stack trace ایجاد می کند:
classStackTraceDemo {
publicstaticvoidmain(String[] args) {
day();
}
staticvoidday() {
hours();
}
staticvoidhours() {
minutes();
}
staticvoidminutes() {
int a = 24 * 60;
System.out.println(a + " minutesinaday");
Thread.dumpStack();
}
}
خروجی:
1440 minutes in a day
java.lang.Exception: Stacktrace
at java.base/java.lang.Thread.dumpStack(Thread.java:138)
atStackTraceDemo.minutes(StackTraceDemo.java:17)
atStackTraceDemo.hours(StackTraceDemo.java:11)
atStackTraceDemo.day(StackTraceDemo.java:7)
atStackTraceDemo.main(StackTraceDemo.java:3)
در این خروجی می توانید مشاهده کنید که Traceback نشان می دهد که برنامه چگونه هر متد جاوا را فراخوانی کرده و در کد منبع آن با چه شماره خطی تماس گرفته است. روشی که ردیابی پشته را ایجاد کرد، روشی است که در بالای پشته نشان داده شده است. متدی که آن را فراخوانی کرده است در خط زیر آن قرار دارد و غیره.
فراتر از Stack Trace
بهطور پیشفرض، وقتی برنامه جاوا شما با خطا مواجه میشود، متوقف میشود و یک stack trace نمایش داده میشود. با این حال، میتوانید به جای نشان دادن پیامهایی که ممکن است کاربران نهایی را سردرگم کند، این خطاها را با ظرافت مدیریت کنید.
می توانید مدیریت خطای برنامه خود را با استفاده از بلوک try…catch() برای گرفتن استثناها بهبود بخشید. همچنین مهم است که انواع مختلف خطاهایی را که برنامه های شما ممکن است با آن مواجه شوند در نظر بگیرید – و درک کنید.