# Debugging

## XDS cli architecture

This tool is written in *Go*.

```bash
|
+-- bin/                # where xds-cli binary will be built
|
+-- cmd-XXX.go          # GO sources of each sub-commands
|
+-- conf.d/             # Linux configuration and startup files (systemd user service)
|
+-- glide.yaml          # Go package dependency file
|
+-- LICENSE             # XDS cli license
|
+-- main.go             # main entry point (Go)
|
+-- Makefile            # makefile including
|
+-- README.md           # readme
|
+-- scripts/            # hold various scripts used for installation
|
+-- vendor/             # temporary directory to hold Go dependencies packages
```

## Debug

Install first [Visual Studio Code](https://code.visualstudio.com/) and
[Go plugin](https://marketplace.visualstudio.com/items?itemName=lukehoban.Go)
(`ext install lukehoban.Go`)

Visual Studio Code launcher settings can be found into `.vscode/launch.json`.

Please follow instructions of xds-agent [debugging chapter](../2_xds-agent/4_debug.html#debug-xds-agent-go-code),
knowing that you execute these same instructions in `xds-cli` repo, in other words
by replacing *xds-agent* references by *xds-cli*.