Link

Debugging tips

Recall that a Go Server Page is compiled to a binary plugin then loaded dynamically into a gosp-server process. Consequently, it can be tricky debugging a Go Server Page in vivo. Arguably the best way to debug a faulty Go Server Page is to run gosp-server from the command line in non-server mode:

gosp2go --build -o my-page.so my-page.html
gosp-server --plugin=my-page.so

This can be abbreviated to

gosp2go --run my-page.html

The data passed to the gosp-server by the Apache module can be fabricated by storing it in a JSON file and passing that to gosp-server with the --file option:

gosp2go --build -o my-page.so my-page.html
gosp-server --plugin=my-page.so --file=my-inputs.json

or, for short,

gosp2go --run my-page.html -- --file=my-inputs.json

For example, my-inputs.json in the above might contain the following JSON code:

{
  "UserData": {
    "Scheme": "http",
    "LocalHostname": "www.example.com",
    "Port": 80,
    "Uri": "/index.html"
  }
}

Provide whatever fields from gosp.RequestData your particular Go Server Page accesses.

See the gosp2go(1) man page and the gosp-server(1) man page for descriptions of those tools’ command-line options.

Configuring Apache with LogLevel debug will cause Go Server Pages to write a Handling gosp.RequestData{…} line to the Apache error-log file (e.g., error.log). This can be helpful for diagnosing requests that lead to incorrect behavior.

Finally, a Go Server Page can invoke gosp.LogDebugMessage to write a debug message to the Apache error-log file, for example with gosp.LogDebugMessage(gospMeta, "About to do something dangerous"). Debug messages appear only if Apache is configured with LogLevel debug.