خطایابی کد های Go با visual studio code

golang18 اسفند 1398

توی این مقاله میخوام آموزش دیباگ کردن برنامه ها و کد های نوشته شده با زبان Go رو در Visual Studio Code کار کنیم.

قبل از هرچیزی دقت کنید که محیط توسعه GoLang رو آماده کرده باشین, اگر اینکار رو نکردید میتونید از آموزش های زیر استفاده کنید:

بریم سراغ اصل کار:

1- VSCode رو باز کنید و Extention زیر رو نصب کنید:

https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go

بعد از انجام موارد بالا وقتی که یک پروژه یا فایلی با پسوند .go رو باز میکنید, در قسمت Status Bar (پایین سمت راست) در VSCode پیغامی برای نصب ابزار های تجزیه و بررسی نشون داده میشه که با کلیک روی اون و انتخاب گزینه install بسته های مورد نیاز پروژه اتوماتیک نصب میشن.

 نصب ابزار های تجزیه و بررسی Go

2-حالا باید از یک دیباگر استفاده کنیم, من از Delve استفاده میکنم یک debugger رایگان و open source برای Go هرچند ابزار های دیگه ای هم وجود داره ولی من از Delve استفاده کردم و جواب خودشو پس داده .

برای نصب Delve کافیه از دستور زیر استفاده کنید:

go get -u github.com/go-delve/delve/cmd/dlv

ساخت یک پروژه ساده با Go

برای اینکه debugger رو تست کنیم یک پروژه با کد های زیر در یک فایل به نام main.go می سازیم:

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

// Avenger represents a single hero
type Avenger struct {
    RealName string `json:"real_name"`
    HeroName string `json:"hero_name"`
    Planet   string `json:"planet"`
    Alive    bool   `json:"alive"`
}

func (a *Avenger) isAlive() {
    a.Alive = true
}

func main() {
    avengers := []Avenger{
        {
            RealName: "Dr. Bruce Banner",
            HeroName: "Hulk",
            Planet:   "Midgard",
        },
        {
            RealName: "Tony Stark",
            HeroName: "Iron Man",
            Planet:   "Midgard",
        },
        {
            RealName: "Thor Odinson",
            HeroName: "Thor",
            Planet:   "Midgard",
        },
    }

    avengers[1].isAlive()

    jsonBytes, err := json.Marshal(avengers)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(string(jsonBytes))
}

توضیح کد های بالا:

برای Avenger یک struct تعریف کردیم, بعدش یک آرایه از شخصیت های فیلم سینمایی avengers ساختیم که وضعیت زنده بودن یکی رو به true تغییر دادیم برای این کار از تابع .isAlive() استفاده کردیم و در آخر خروجی رو به JSON تبدیل کردیم و نمایش دادیم.

با دستور زیر پروژه رو اجرا کنید :

go run main.go

خروجی پروژه :

[
    {
        "real_name": "Dr. Bruce Banner",
        "hero_name": "Hulk",
        "planet": "Midgard",
        "alive": false
    },
    {
        "real_name": "Tony Stark",
        "hero_name": "Iron Man",
        "planet": "Midgard",
        "alive": true
    },
    {
        "real_name": "Thor Odinson",
        "hero_name": "Thor",
        "planet": "Midgard",
        "alive": false
    }
]

خطایابی با Breakpoints

برای اینکه بتونید با استفاده از Breakpoint برنامه رو دیباگ کنین ابتدا باید پیکربندی یا کانفیگ مربوط به این قسمت رو انجام بدیم, پس از ستون سمت چپ روی آیکن دیباگ در Visual Studio Code کلیک کنید و بعد روی آیکن پیکربندی کلیک کنید:

بعد از اینکار فایل پیکربندی در مسیر .vscode/launch.json ساخته میشه.

حالا کافیه که توی برنامه یک Breakpoint ایجاد کنیم و برنامه رو خطایابی کنیم برای مثال من یک Breakpoint کنار خط func main() میزارم :

کافیه دکمه F5 کیبورد یا دکمه سبز رنگ ( Launch ) داخل VsCode رو بزنید تا برنامه به حالت دیباگ بره و بتونید مرحله به مرحله برنامه رو خطایابی کنید.

میتونید با دکمه F10 یا Step over گام به گام پروژه رو خطایابی کنید.

وقتی با Step Over گام به گام جلو میرید وضعیت خط به خط برنامه رو میتونید در هر لحظه ببینید و مقدار جزئیات بیشتر ازن تغییرات رو در ستون سمت چپ ویژوال استدیوکد می تونید ببینید برای مثال وقتی که از بدنه تابع main که با breakpoint انتخاب کرده بودیم خارج شده و به خط 40 میرسیم به ستون های سمت چپ دقت کنید:

همونطور که برنامه رو گام به گام جلو میبریم موقعیت و مقدار متغییر هارو میتونید ببینیم که چطور تغییر میکنن برای مثال همچنان از Step over استفاده کنید و برنامه رو جلو ببرید تا وقتی که به خط 40 میرسیم اگر دقت کنید مقدار Alive برای یکی از Avenger ها به True تغییر پیدا میکنه.

خطایابی با Breakpoint شرطی

یکی از امکانات خوبی که در VS Code وجود داره استفاده از Breakpoint های شرطیه که میتونید با استفاده از یک شرط که پاسخش True یا False یا به عبارتی همون Boolean یک قسمت از برنامه رو دیباگ کنید.

برای مثال ما در خط 40 این برنامه avenger خانه دوم آرایه رو با استفاده از تابع avengers[1].isAlive() تغییر دادیم و وضعیت زنده بودن اون رو true کردیم.

حالا با استفاده از یک شرط تعریف کردیم که اگر مقدار آن خانه از آرایه ای که به صورت

avenger[1].Planet == "Earth"

بود, breakpoint کار کنه و برنامه به حالت دیباگ بره.

برای اینکار وقتی میخواید Breakpoint تعریف کنید از کلیک راست استفاده کنید و از منو باز شده Add Conitional Breakpoint رو انتخاب کنید, اگر هم از قبل Break point دارید کافیه روی همون کلیک راست کنید و Edit Breakpoint رو بزنید و در پنجره باز شده شرط مورد نظرتون رو بنویسید.

برای مثال من از شرطی که بالاتر توضیح دادیم استفاده میکنم و مقدار

avenger[1].Planet == "Earth"

رو به عنوان عبارت شرطی وارد میکنم.

break point شرطی در vscode
visual studio code conitional break point

اگر برنامه رو با استفاده از debugger اجرا کنید یا همون F5 رو بزنید متوجه میشید که breakpoint کار نمیکنه چون شرط ما وجود نداره.

پس بیاید یه تغییر توی کد ها بدیم و مقدار خونه دوم آرایه رو به این شکل ویرایش کنیم :

{
    RealName: "Tony Stark",
    HeroName: "Iron Man",
    Planet:   "Earth",
},

حالا مجدد F5 رو بزنید تا برنامه به حالت دیباگ بره اگر دقت کنید این بار وقتی به breakpoint میرسیم کار میکنه و خروجی برنامه در Debug console نشون داده میشه.

جمع بندی

خطایابی یا Debug کردن پروژه یکی از قسمت های اصلی توسعه نرم افزار و برنامه نویسی به حساب میاد, توی این آموزش با دو روش دیباگ کردن کد های نوشته شده با زبان Go در Visual Studio Code و ابزار های مورد نیاز برای اینکار آشنا شدیم.

توی قسمت بعد آموزش Debuge کردن حالت Test رو باهم کار میکنیم.

Please Post Your Comments & Reviews

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*