【问题标题】:I run `"crash_demo.run"` by `spawn-fcgi` . How to collect `core` file我通过 `spawn-fcgi` 运行 `"crash_demo.run"`。如何收集`core`文件
【发布时间】:2022-07-07 12:00:00
【问题描述】:

1。问题

我通过 spawn-fcgi 运行 "crash_demo.run"。 如何收集core文件。

2。背景与环境

我是 exolore C++ Web 编程。

  1. 网络服务器:nginx
  2. CGI(FastCGI) : fastcgipp 3.0
  3. CGI 包装:spawn-fcgi
    • 我没有使用 ngifix 提供的FCGI Wrap
    • 我知道FCGI Wrap 是由 spawn-fcgi 驱动的,当然这是题外话了。
  4. 我的 C++ 应用程序。 (称为crash_demo)。

3。重现异常的步骤

  1. crash_demo 插入代码 throw "test exception str, check _core_ file" ,构建得到 crash_demo.run
  2. 运行 nginx:sudo nginx -c my_nginx_custom.config
  3. ulimit -c unlimited
  4. 运行crash_demo.run spawn-fcgi : spawn-fcgi -a 127.0.0.1 -p 9000 -f /path/crash_demo.run
  5. 测试正常的http请求,http请求可以正常完成。
  6. 测试crash_demo http请求,得到5xx响应。
    • crash_demo.run所在目录看不到core文件

我的猜测

  1. core 文件未生成。
  2. core文件已生成,但我没有文件路径。

有人知道发生了什么吗?



解决方案更新

我的问题有问题。

谢谢@sehe,我的步骤:

  1. 我看了两个网页
    1. https://man7.org/linux/man-pages/man5/core.5.html
    2. https://zhuanlan.zhihu.com/p/240633280
  2. update my /proc/sys/kernel/core_pattern
    • core -> core_%e_%p_%t
  3. ulimit -c unlimited
  4. spawn-fcgi -a 127.0.0.1 -p 9000 -f /path/crash_demo.run
  5. sudo find / core_ | grep core_crash_demo
    • 结果/path/core_crash_demo._5080_1652169152

所以,我对我的问题的猜测失败了。

事实是,当我提出问题时,我不会生成core 文件。

当我生成core文件成功时,core文件路径为crash_demo.run父目录。



解决方案更新 2

我们想知道两点:

  1. 如何生成核心转储文件
  2. 如何通过核心转储文件细化异常代码

如何生成核心转储文件?

参考文件:core manual

核心手册写了很多点,我只列出我关心的点:

  1. 系统限制核心转储文件大小,我们需要取消限制:
  • ulimit -a检查限制/ulimit -c unlimited取消限制
  1. 修复/proc/sys/kernel/core_pattern
  • 默认值为core
  • 将其修复为 -> core_%e_%p_%t 意思是 core_your_execute_file_name_pid_timestemp
  • 修复 cmd : sudo bash -c 'echo core_%e_%p_%t > /proc/sys/kernel/core_pattern'

现在运行你的异常,你可以获得核心文件。

  • 你可能需要搜索它:sudo find / core_ | grep core_

如何通过核心转储文件对异常代码进行细化?

【问题讨论】:

  • 我要获取崩溃核心文件。
  • Stack Overflow 是一个英文网站。见here
  • @sehe 是的,所以我用两种语言把一个问题写了两次。

标签: c++ nginx coredump spawn-fcgi


【解决方案1】:

这个问题可能更适合 askubuntu.com 或 serverfault.stackexchange.com。

您可能需要配置核心转储。由于我们不知道平台,我假设可能是 Linux。参见例如core(5):

在多种情况下核心转储文件不可用 生产出来的

根据我的经验,需要设置核心模式 (/proc/sys/kernel/core_pattern)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多