Отладка Ревела - Как

Кто-нибудь может дать некоторые рекомендации о том, как отлаживать приложение Revel. Я мог бы быть глупым, но мне не удалось это сделать. Некоторые четкие шаги могут оказать реальную помощь.

1 ответ

Решение

Revel - это просто набор библиотек поверх стандартных библиотек Go, а также некоторые обертки, создающие хорошую структуру для вас.

Вы можете отлаживать его, как и любые другие приложения go, используя GDB.

В частности, вы можете сначала собрать его, а затем отладить соответствующий исполняемый файл (предполагается, что моя GOPATH - ~/workspace):

[user@host ~]$ workspace/bin/revel new app
~
~ revel! http://revel.github.io
~
Your application is ready:
    /home/user/workspace/src/app

You can run it with:
   revel run app
[user@host ~]$ workspace/bin/revel build app app
~
~ revel! http://revel.github.io
~
INFO  2014/05/30 12:21:25 revel.go:320: Loaded module static
TRACE 2014/05/30 12:21:25 build.go:128: Exec: [/usr/bin/git --git-dir=/home/user/workspace/src/app/.git describe --always --dirty]
WARN  2014/05/30 12:21:25 build.go:132: Cannot determine git repository version: exit status 128
TRACE 2014/05/30 12:21:25 build.go:77: Exec: [/home/user/go/bin/go build -ldflags -X app/app.APP_VERSION "" -tags  -o /home/user/workspace/bin/app app/app/tmp]

Затем у вас есть автономное исполняемое приложение на /home/user/workspace/bin/app, который вы можете запускать независимо от revel следующим образом (обратите внимание, что аргументы строки cmd обязательны, в противном случае программа завершится сбоем):

[user@host ~]$ workspace/bin/app -importPath app revel -srcPath "workspace/src" -runMode dev
INFO  2014/05/30 12:51:40 revel.go:320: Loaded module static
INFO  2014/05/30 12:51:40 revel.go:320: Loaded module testrunner
INFO  2014/05/30 12:51:40 main.go:26: Running revel server
Listening on :9000...

Затем вы можете отладить этот исполняемый файл, используя GDB, как и любую другую программу:

[user@host ~]$ gdb -silent --args workspace/bin/app -importPath app revel -srcPath "workspace/src" -runMode dev
Reading symbols from workspace/bin/app...done.
Loading Go Runtime support.

Затем с помощью команд GDB запустите программу и установите точки останова:

(gdb) start
Temporary breakpoint 1 at 0x400c00: file /home/user/workspace/src/app/app/tmp/main.go, line 23.
Starting program: /home/user/workspace/bin/app -importPath app revel -srcPath workspace/src -runMode dev
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7fffe7804700 (LWP 5742)]

Temporary breakpoint 1, main.main () at /home/user/workspace/src/app/app/tmp/main.go:23
23      func main() {
(gdb) b workspace/src/app/app/controllers/app.go:9
Breakpoint 2 at 0x465610: file /home/user/workspace/src/app/app/controllers/app.go, line 9.
(gdb) cont
Continuing.
INFO  2014/05/30 13:12:31 revel.go:320: Loaded module static
INFO  2014/05/30 13:12:31 main.go:26: Running revel server
TRACE 2014/05/30 13:12:31 controller.go:375: Registered controller: App
TRACE 2014/05/30 13:12:31 controller.go:375: Registered controller: Static
TRACE 2014/05/30 13:12:31 watcher.go:94: Watching: /home/user/workspace/src/app/app/views
TRACE 2014/05/30 13:12:31 watcher.go:94: Watching: /home/user/workspace/src/app/app/views/App
TRACE 2014/05/30 13:12:31 watcher.go:94: Watching: /home/user/workspace/src/app/app/views/errors
TRACE 2014/05/30 13:12:31 watcher.go:94: Watching: /home/user/workspace/src/github.com/revel/revel/templates
TRACE 2014/05/30 13:12:31 watcher.go:94: Watching: /home/user/workspace/src/github.com/revel/revel/templates/errors
TRACE 2014/05/30 13:12:31 i18n.go:119: Successfully loaded messages from file sample.en
TRACE 2014/05/30 13:12:31 watcher.go:72: Watching: /home/user/workspace/src/app/conf/routes
[New Thread 0x7fffe6ea3700 (LWP 5743)]
[New Thread 0x7fffe66a2700 (LWP 5744)]
[New Thread 0x7fffe5ea1700 (LWP 5745)]
[New Thread 0x7fffe56a0700 (LWP 5746)]
Listening on :9000...

На данный момент ваша программа работает, но ваши контроллеры (пока) не вызываются: код будет выполняться только при поступлении запроса, поэтому перейдите в браузер и получите доступ: "localhost:9000" (или любой другой порт, который вы настроили в app.conf), чтобы вызвать ответ:

TRACE 2014/05/30 13:12:36 template.go:174: Refreshing templates from [/home/user/workspace/src/app/app/views /home/user/workspace/src/github.com/revel/revel/templates]
INFO  2014/05/30 13:12:36 router.go:293: Skipping routes for inactive module testrunner
TRACE 2014/05/30 13:12:36 i18n.go:183: Unable to read locale cookie with name 'REVEL_LANG': http: named cookie not present
TRACE 2014/05/30 13:12:36 i18n.go:149: Found Accept-Language header value: en-GB
[Switching to Thread 0x7fffe56a0700 (LWP 5746)]

Breakpoint 2, app/app/controllers.App.Index (c=..., ~anon0=...) at /home/user/workspace/src/app/app/controllers/app.go:9
9       func (c App) Index() revel.Result {
(gdb) 

И теперь вы находитесь на своей точке останова в контроллере.

А затем продолжайте использовать GDB. (Существует множество интерфейсов для GDB, от командной строки (например, CGDB) до графических или включенных в IDE (как в GoClipse), но в конечном итоге все сводится к одному и тому же процессу.

Удачи с вашим кодом!

Другие вопросы по тегам