标签: gdb

Linux 上的非阻塞核心转储?

我正在寻找一种对 Linux 上正在运行的进程进行非侵入式核心转储的方法。

我熟悉 gdb 的gcore,但它只能在gdb附加到进程时运行并且它停止调试。对于一个大的核心转储,这可能意味着多秒甚至几分钟的中断执行。

有没有非阻塞的替代方案?

Linux 支持写时复制内存,它依赖于在fork()没有exec(). 所以我在考虑一些内核级别的事情,其中​​内核获取正在转储的进程的进程页表的写时复制快照,然后在原始进程继续运行的同时写出核心。

我很确定我可以使用gdb强制fork()然后转储孩子,而父母愉快地继续,然后wait()在父母终止后收割孩子。但是,它很混乱,并且仍然需要两次中断父进程,尽管很短。

以前肯定有人需要这个吗?

linux dump gdb

24
推荐指数
1
解决办法
1717
查看次数

使用 PHP 分段错误调试 Apache 的建议

每小时左右一个 Apache 子进程段。我们的网络服务器上的故障。我们正在运行带有 Apache prefork MPM 的非线程 PHP 5.2.17 Apache 模块。我已经使用一些核心转储、gdb 和来自 php 的 github repo 的这个 .gdbinit 文件运行了 httpd,在 gdb 中为每个文件输入以下命令:

dump_bt executor_globals.current_execute_data
Run Code Online (Sandbox Code Playgroud)

由于没有 gdb 或 php 解释器的内部工作经验,我无法从结果中做出任何事情。

core.22762
[0x53896ef0] () :-2118682552
[0x538977a0] () /Statement/Interface.php:113
[0x538978a0] /Zend/Db/Statement/Interface.php()

core.22791
[0x538977a0] () @:0
[0x538978a0] ()

core.5568
[0x53896ef0] () :2061035360
[0x538977a0] () :1767992432
[0x538978a0] ()

core.30384
[0x538977a0] () :0
[0x538978a0] ()

core.3091
[0x53896ef0] mysql_query():992424253
[0x538977a0] () ~:17
[0x538978a0] ()
Run Code Online (Sandbox Code Playgroud)

(core.3091 之后也显示了这一点Program terminated with signal 11, Segmentation fault. …

php zend-framework gdb segmentation-fault apache-2.2

5
推荐指数
1
解决办法
3461
查看次数

标签 统计

gdb ×2

apache-2.2 ×1

dump ×1

linux ×1

php ×1

segmentation-fault ×1

zend-framework ×1