52static void __attribute__((constructor(90))) VuoLog_initModuleName(
void)
55 if (dladdr((
void *)VuoLog_initModuleName, &info) && info.dli_fname)
57 VuoLog_moduleName = basename_r(info.dli_fname, (
char *)malloc(strlen(info.dli_fname + 1)));
83#define VuoLog_status(format, ...) VuoLog_statusF(VuoLog_moduleName, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__)
89void VuoLog_statusF(
const char *moduleName,
const char *file,
const unsigned int linenumber,
const char *function,
const char *format, ...);
91void VuoLog_statusF(
const char *moduleName,
const char *file,
const unsigned int linenumber,
const char *function,
const char *format, ...) __attribute__((format(printf, 5, 6)));
100void VuoLog(
const char *moduleName,
const char *file,
const unsigned int linenumber,
const char *function,
const char *format, ...);
102void VuoLog(
const char *moduleName,
const char *file,
const unsigned int linenumber,
const char *function,
const char *format, ...) __attribute__((format(printf, 5, 6)));
117#define VL() VuoLog(VuoLog_moduleName, __FILE__, __LINE__, __func__, "")
133#define VLog(format, ...) VuoLog(VuoLog_moduleName, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__)
140#define VUserLog(format, ...) VuoLog(VuoLog_moduleName, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__)
147#define VDebugLog(format, ...) do { if (VuoIsDebugEnabled()) VuoLog(VuoLog_moduleName, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__); } while(0)
161#define VLogHeap(heapPointer) do { \
162 char *description = VuoHeap_getDescription(heapPointer); \
163 VLog("%s = %p (registered at %s)", #heapPointer, heapPointer, description); \
171#define VUOLOG_PROFILE_BEGIN(object) double VuoLog_time_ ## object = VuoLogGetTime();
172#define VUOLOG_PROFILE_END(object) VuoLog_recordTime(#object, VuoLogGetTime() - VuoLog_time_ ## object);
185#define VUOLOG_PROFILE_BEGIN(object)
190#define VUOLOG_PROFILE_END(object)
207static inline void VuoDeferCleanup(
void (^*b)(
void)) {
if (*b) (*b)(); }
210#define VuoDeferMerge(a,b) a##b
213#define VuoDeferVarName(a) VuoDeferMerge(VuoDeferScopeVar, a)
230#define VuoDefer __attribute__((cleanup(VuoDeferCleanup),unused)) void (^VuoDeferVarName(__COUNTER__))(void) =