# Debugging ## XDS agent architecture The agent part is written in *Go* and the webapp / dashboard is in *typescript + Angular4*. ```bash | +-- bin/ where xds-server binary file will be built | +-- conf.d Linux configuration and startup files (systemd user service) | +-- glide.yaml Go package dependency file | +-- lib/ sources of server part (Go) | +-- main.go main entry point of of Web server (Go) | +-- Makefile makefile including | +-- README.md readme | +-- scripts/ hold various scripts used for installation or startup | +-- tools/ temporary directory to hold development tools (like glide) | +-- vendor/ temporary directory to hold Go dependencies packages | +-- webapp/ source client basic webapp / dashboard ``` ## Debug xds-agent (Go code) 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`. The important think is to correctly set `GOPATH` in launch.json in order to build xds-agent and debug it within Visual Studio Code. Here is an example of launch.json: ```json { "version": "0.2.0", "configurations": [{ "name": "XDS-Agent", "type": "go", "request": "launch", "mode": "debug", "remotePath": "", "port": 2345, "host": "127.0.0.1", "program": "${workspaceRoot}", "env": { "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}", }, "args": ["-log", "debug", "-c", "__agent-config_local_dev.json"], "showLog": false } ] } ``` And `__agent-config_local_dev.json` file content is as follow : ```json { "webAppDir": "./webapp/dist", "logsDir": "${HOME}/tmp/xds-agent/logs", "xdsServers": [ { "url": "http://localhost:8000" } ], "syncthing": { "binDir": "./bin", "home": "${HOME}/tmp/xds_local_dev/syncthing-config", "gui-address": "http://localhost:8386", } } ``` ### Tricks to debug both xds-agent and xds-server To debug both `xds-agent` and `xds-server` or common code `xds-common`, it may be useful use the same local sources. A trick to do that is to replace `xds-server` + `xds-common` in `vendor` directory by a symlink that points to local sources. So clone first `xds-server` + `xds-common` sources next to `xds-agent` directory. You should have the following tree: ```bash tree -L 5 src/ src/ `-- gerrit.automotivelinux.org `-- gerrit `-- src `-- xds |-- xds-agent |-- xds-common `-- xds-server ``` Then invoke `vendor/debug` Makefile rule to create symbolic links inside vendor directory : ```bash cd src/gerrit.automotivelinux.org/gerrit/src/xds/xds-agent make vendor/debug ``` ## Debug dashboard part (Typescript / angular code) Start `xds-agent` either from command line or in debug mode (see previous chapter) and in another terminal start a watcher daemon so that type typescript sources of webapp / dashboard are automatically "transpiled" using following command : ```bash cd webapp npm run watch ``` Then open the XDS Dashboard page ([http://localhost:8800](http://localhost:8800)) and open the developer tool of web browser (for example `Ctrl+Shift+I` in Chrome).