Hacking

How to Debug

We have a helper function called logger.dbg to help with debugging. You can use that function to print string and tables:

local logger = require("logger")
a = {"1", "2", "3"}
logger.dbg("table a: ", a)

Anything printed by logger.dbg starts with DEBUG.

On most target platforms, log output is saved to crash.log in the koreader directory.

 04/06/17-21:44:53 DEBUG foo

In production code, remember that arguments are always evaluated in Lua, so, don't inline complex computations in logger functions' arguments. If you really have to, hide the whole thing behind a dbg.is_on branch, like in frontend/device/input.lua.

Bug hunting in KPV (KOReader's predecessor)

A real example of bug hunting in KPV's cache system: https://github.com/koreader/kindlepdfviewer/pull/475

Developing UI widgets

tools/wbuilder.lua is your friend, if you need to create new UI widgets. It sets up a minimal environment to bootstrap KOReader's UI framework to avoid starting the whole reader. This gives you quick feedback loop while iterating through your widget changes. It's also a handy tool for debugging widget issues.

To get a taste of how it works, try running this command at the root of KOReader's source tree:

 ./kodev wbuilder

It will spawn up an emulator window with a grid and simple timer widget for demonstration.

You can add more UIManager:show call at the end of tools/wbuilder.lua to test your new widgets.

generated by LDoc 1.5.0 Last updated 2024-03-18 16:45:36