Don't put essential logic inside an assert.

When running in release mode, we want the assertion to go away, but not the call to pthread_setspecific()!
Backwards __debug attribute.

It's when building in Release configuration that we need to mark certain variables as unused, not the other way around!

Also, "if not not-debug" is an annoying way to say "if debugging".
Assert that we always find someone to blame.
Make debugging output more readable.
More assertions.

Assertions are good... use them!
These variables are only used for assertions.

When compiling without asserts, we need to mark them as __unused.