دیباگ کردن فرایند شناسایی دلیل رفتار نادرست یک برنامه است. دیباگرها (Debuggers) به ما اجازه میدهند تا جریان اجرای برنامه و وضعیت فعلی آن را درک کنیم. سبکهای مختلفی برای دیباگ کردن وجود دارد؛ این بخش تنها بر اتصال یک دیباگر به برنامه و دیباگ کردن core dump تمرکز خواهد کرد.
کاربران Go بیشتر از دیباگرهای زیر استفاده میکنند:
-
Delve: Delve یک دیباگر برای زبان برنامهنویسی Go است. این ابزار از مفاهیم runtime و انواع built-in زبان Go پشتیبانی میکند. Delve تلاش میکند تا یک دیباگر کاملاً قابلاعتماد و با تمام ویژگیها برای برنامههای Go باشد.
-
GDB: زبان Go از طریق کامپایلر استاندارد Go و Gccgo از GDB پشتیبانی میکند. مدیریت stack، threading و runtime شامل جنبههایی هستند که بهقدر کافی با مدل اجرایی مورد انتظار GDB تفاوت دارند که میتوانند دیباگر را گیج کنند؛ حتی وقتی برنامه با gccgo کامپایل شده باشد. با اینکه میتوان از GDB برای دیباگ کردن برنامههای Go استفاده کرد، اما ایدهآل نیست و ممکن است سردرگمی ایجاد کند.
دیباگرها چقدر با برنامههای Go خوب کار میکنند؟
کامپایلر gc بهینهسازیهایی مانند function inlining و variable registerization انجام میدهد. این بهینهسازیها گاهی اوقات دیباگ کردن با دیباگرها را سختتر میکنند. تلاشی در جریان است تا کیفیت اطلاعات DWARF تولیدشده برای binaryهای بهینهشده بهبود یابد. تا زمانی که آن بهبودها در دسترس باشند، توصیه میکنیم هنگام build کردن کدی که قرار است دیباگ شود، بهینهسازیها را غیرفعال کنید. دستور زیر یک package را بدون بهینهسازیهای کامپایلر build میکند:
$ go build -gcflags=all="-N -l"
💡 بهعنوان بخشی از تلاش برای بهبود، Go 1.10 یک فلگ جدید کامپایلر با نام -dwarflocationlists معرفی کرد. این فلگ باعث میشود کامپایلر location listهایی اضافه کند که به دیباگرها در کار با binaryهای بهینهشده کمک میکند. دستور زیر یک package را با بهینهسازیها اما همراه با DWARF location listها build میکند:
$ go build -gcflags="-dwarflocationlists=true"
رابط کاربری پیشنهادی برای دیباگر چیست؟
با اینکه هم Delve و هم GDB رابط CLI ارائه میدهند، بیشتر یکپارچهسازیهای editor و IDEها رابطهای کاربری مخصوص دیباگ کردن را فراهم میکنند.
آیا امکان انجام postmortem debugging برای برنامههای Go وجود دارد؟
فایل core dump فایلی است که شامل memory dump یک process در حال اجرا و وضعیت process آن است. این فایل عمدتاً برای postmortem debugging یک برنامه و درک وضعیت آن در حین اجرا استفاده میشود. این دو کاربرد، دیباگ کردن core dumpها را به یک ابزار تشخیصی مناسب برای بررسی و تحلیل سرویسهای production تبدیل میکند. امکان دریافت فایلهای core از برنامههای Go و استفاده از Delve یا GDB برای دیباگ کردن وجود دارد؛ برای راهنمای گامبهگام به صفحه core dump debugging مراجعه کنید.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات