root/xdebug_handlers.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
   +----------------------------------------------------------------------+
   | Xdebug                                                               |
   +----------------------------------------------------------------------+
   | Copyright (c) 2002, 2003, 2004, 2005, 2006 Derick Rethans            |
   +----------------------------------------------------------------------+
   | This source file is subject to version 1.0 of the Xdebug license,    |
   | that is bundled with this package in the file LICENSE, and is        |
   | available at through the world-wide-web at                           |
   | http://xdebug.derickrethans.nl/license.php                           |
   | If you did not receive a copy of the Xdebug license and are unable   |
   | to obtain it through the world-wide-web, please send a note to       |
   | xdebug@derickrethans.nl so we can mail you a copy immediately.       |
   +----------------------------------------------------------------------+
   | Authors:  Derick Rethans <derick@xdebug.org>                         |
   +----------------------------------------------------------------------+
 */

#ifndef __HAVE_XDEBUG_HANDLERS_H__
#define __HAVE_XDEBUG_HANDLERS_H__

#include "php_xdebug.h"
#include "xdebug_com.h"
#include "xdebug_llist.h"
#include "xdebug_hash.h"
#include "xdebug_private.h"
#include "usefulstuff.h"

typedef struct _xdebug_brk_admin            xdebug_brk_admin;
typedef struct _xdebug_brk_info             xdebug_brk_info;
typedef struct _xdebug_eval_info            xdebug_eval_info;
typedef struct _xdebug_con                  xdebug_con;
typedef struct _xdebug_debug_list           xdebug_debug_list;
typedef struct _xdebug_remote_handler       xdebug_remote_handler;
typedef struct _xdebug_remote_handler_info  xdebug_remote_handler_info;

struct _xdebug_debug_list {
        char *last_file;
        int   last_line;
};

#define BREAKPOINT_TYPE_LINE      1
#define BREAKPOINT_TYPE_FUNCTION  2
#define BREAKPOINT_TYPE_METHOD    3
#define BREAKPOINT_TYPE_EXCEPTION 4

struct _xdebug_brk_admin {
        int   id;
        int   type;
        char *key;
};

struct _xdebug_con {
        int                    socket;
        void                  *options;
        xdebug_remote_handler *handler;
        fd_buf                *buffer;
        char                  *program_name;
        xdebug_hash           *breakpoint_list;
        xdebug_hash           *function_breakpoints;
        xdebug_hash           *class_breakpoints;
        xdebug_hash           *eval_id_lookup;
        int                    eval_id_sequence;
        xdebug_llist          *line_breakpoints;
        xdebug_llist          *exception_breakpoints;
        xdebug_debug_list      list;
        int                    do_break;

        int                    do_step;
        int                    do_next;
        int                    do_finish;
        int                    next_level;
};

#define XDEBUG_HIT_DISABLED       0
#define XDEBUG_HIT_GREATER_EQUAL  1
#define XDEBUG_HIT_EQUAL          2
#define XDEBUG_HIT_MOD            3

#define XDEBUG_BRK_FUNC_CALL      1
#define XDEBUG_BRK_FUNC_RETURN    2

struct _xdebug_brk_info {
        char                 *type;
        char                 *classname;
        char                 *functionname;
        char                 *exceptionname;
        int                   function_break_type; /* XDEBUG_BRK_FUNC_* */
        char                 *file;
        int                   file_len;
        int                   lineno;
        char                 *condition;
        int                   disabled;
        int                   temporary;
        int                   hit_count;
        int                   hit_value;
        int                   hit_condition;
};

struct _xdebug_eval_info {
        int   id;
        int   refcount;
        char *contents;
};

struct _xdebug_remote_handler {
        /* Init / deinit */
        int (*remote_init)(xdebug_con *h, int mode);
        int (*remote_deinit)(xdebug_con *h);

        /* Stack messages */
        int (*remote_error)(xdebug_con *h, int type, char *exception_type, char *message, const char *location, const uint line, xdebug_llist *stack);

        /* Breakpoints */
        int (*remote_breakpoint)(xdebug_con *h, xdebug_llist *stack, char *file, long lineno, int type);

        /* Eval ID registration and removal */
        int (*register_eval_id)(xdebug_con *h, function_stack_entry *fse);
        int (*unregister_eval_id)(xdebug_con *h, function_stack_entry *fse, int eval_id);

        /* Information */
        char *(*get_revision)(void);
};

struct _xdebug_remote_handler_info {
        char                  *name;
        char                  *description;
        xdebug_remote_handler  handler;
};

xdebug_remote_handler* xdebug_handler_get(char* mode);
xdebug_remote_handler_info* xdebug_handlers_get(void);

void xdebug_brk_info_dtor(xdebug_brk_info *brk);
void xdebug_llist_brk_dtor(void *dummy, xdebug_brk_info *brk);
void xdebug_hash_brk_dtor(xdebug_brk_info *brk);
void xdebug_hash_eval_info_dtor(xdebug_eval_info *ei);

#endif

/* [<][>][^][v][top][bottom][index][help] */