It's expected to be able to watch an expression in the debugger and ZeroBrane Studio provides that functionality. You can specify an expression and it will be evaluated when the application is stopped in the debugger.
This is all good, but the application needs to be stopped to refresh the values and there are situations when you want to see the values while your application is running. ZeroBrane Studio supports redirecting of program output to the Output window in the IDE (when debugging) and (with a bit of magic) this can be leveraged to send the values you want to appear in the Watch window.
What does it give you? You can then include in your code print
statements of the form print("foo=", someValue)
and print("bar=", someOtherValue)
and those values will be shown in the Watch window as foo
and bar
. The values can be complex values that will be pretty-printed for you (this is the same functionality that "prints" complex values to the Output window during debugging). For example, the script below will show values for a, b, c, and d as defined in the print
expressions:
for i = 1, 1000 do
require('socket').sleep(0.01)
print("a=", {i, i*2})
if 0 == i % 10 then print("b=", {i, i*3}, collectgarbage("count")) end
if 0 == i % 100 then print("c=", {i, i*4}, os.clock()) end
print("d=", math.random())
end
Since the "printed" output is sent over sockets, this also works when you debug your application remotely, for example, when you debug something running on a mobile device from ZeroBrane Studio running on a desktop.
For simple values (like d in the example above) the plugin will also calculate min, max, avg, and count values. The result may look similar to this (if you run it you will see that the numbers are updated while your app is running):
Here is the plugin code; you can save it into packages/
folder in the ZeroBrane Studio folder as realtimewatch.lua
and restart the IDE.
Wow. Amazing....