调试核心文件

问题描述 投票:0回答:3

我想写一个可以在Linux中读取核心文件的程序。但是我找不到任何可以在这方面指导我的文档。有人可以指导我在哪里可以找到一些资源吗?

linux debugging gdb coredump
3个回答
1
投票

你也可以看看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
定义了一个generic接口,GDB的上部将使用它与target进行通信。这个目标可以是本地unix进程、远程进程、核心文件……

因此,如果您只研究这些函数背后的内容,您就不会被调试器实现的通用部分所淹没。

(根据您的最终目标是什么,您可能还想在您的应用程序中重用此接口及其实现,它不应该依赖这么多其他东西。


0
投票

查看 gcore 的源代码 http://people.redhat.com/anderson/extensions/gcore.c 可能会有所帮助。


0
投票

可以使用

dbx(1)
mdb(1)
proc(1)
工具之一检查核心文件。

© www.soinside.com 2019 - 2024. All rights reserved.