Отладка Ревела - Как
Кто-нибудь может дать некоторые рекомендации о том, как отлаживать приложение 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), но в конечном итоге все сводится к одному и тому же процессу.
Удачи с вашим кодом!