Вы также можете взглянуть на GDB исходный код , gdb/core*
.
Например, в gdb/corelow.c
вы можете прочитать в конце:
static struct target_ops core_ops;
core_ops.to_shortname = "core";
core_ops.to_longname = "Local core dump file";
core_ops.to_doc = "Use a core file as a target. Specify the filename of the core file.";
core_ops.to_open = core_open;
core_ops.to_close = core_close;
core_ops.to_attach = find_default_attach;
core_ops.to_detach = core_detach;
core_ops.to_fetch_registers = get_core_registers;
core_ops.to_xfer_partial = core_xfer_partial;
core_ops.to_files_info = core_files_info;
core_ops.to_insert_breakpoint = ignore;
core_ops.to_remove_breakpoint = ignore;
core_ops.to_create_inferior = find_default_create_inferior;
core_ops.to_thread_alive = core_thread_alive;
core_ops.to_read_description = core_read_description;
core_ops.to_pid_to_str = core_pid_to_str;
core_ops.to_stratum = process_stratum;
core_ops.to_has_memory = core_has_memory;
core_ops.to_has_stack = core_has_stack;
core_ops.to_has_registers = core_has_registers;
struct target_ops
определяет универсальный интерфейс, который верхняя часть GDB будет использовать для связи с target . Эта цель может быть локальным процессом Unix, удаленным процессом, файлом ядра, ...
Так что, если вы только исследуете, что происходит с этими функциями, вы не будете перегружены общей частью реализации отладчика.
(в зависимости от вашей конечной цели, вы также можете повторно использовать этот интерфейс и его реализацию в своем приложении, не должен полагаться на многие другие вещи.