summaryrefslogtreecommitdiff
path: root/internal/debug.h
blob: 8fa75fd8c648a3acadbdc01f80df64592bd6b3c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef INTERNAL_DEBUG_H /* -*- C -*- */
#define INTERNAL_DEBUG_H
/**
 * @file
 * @brief      Internal header for debugging.
 * @author     \@shyouhei
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 *             modify this file, provided that  the conditions mentioned in the
 *             file COPYING are met.  Consult the file for details.
 */

/* MRI debug support */
void rb_obj_info_dump(VALUE obj);
void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
void ruby_debug_breakpoint(void);

// show obj data structure without any side-effect
#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, __func__)

// same as rp, but add message header
#define rp_m(msg, obj) do { \
    fprintf(stderr, "%s", (msg)); \
    rb_obj_info_dump((VALUE)obj); \
} while (0)

// `ruby_debug_breakpoint()` does nothing,
// but breakpoint is set in run.gdb, so `make gdb` can stop here.
#define bp() ruby_debug_breakpoint()

/* debug.c */
PRINTF_ARGS(void ruby_debug_printf(const char*, ...), 1, 2);

#endif /* INTERNAL_DEBUG_H */