【发布时间】:2022-07-07 12:00:00
【问题描述】:
1。问题
我通过 spawn-fcgi 运行 "crash_demo.run"。
如何收集core文件。
2。背景与环境
我是 exolore C++ Web 编程。
- 网络服务器:nginx
- CGI(FastCGI) : fastcgipp 3.0
- CGI 包装:spawn-fcgi
- 我没有使用 ngifix 提供的FCGI Wrap。
- 我知道
FCGI Wrap是由 spawn-fcgi 驱动的,当然这是题外话了。
- 我的 C++ 应用程序。 (称为
crash_demo)。
3。重现异常的步骤
-
crash_demo插入代码throw "test exception str, check _core_ file",构建得到crash_demo.run - 运行 nginx:
sudo nginx -c my_nginx_custom.config ulimit -c unlimited- 运行
crash_demo.runspawn-fcgi:spawn-fcgi -a 127.0.0.1 -p 9000 -f /path/crash_demo.run - 测试正常的http请求,http请求可以正常完成。
- 测试
crash_demohttp请求,得到5xx响应。-
crash_demo.run所在目录看不到core文件
-
我的猜测
-
core文件未生成。 -
core文件已生成,但我没有文件路径。
有人知道发生了什么吗?
解决方案更新
我的问题有问题。
谢谢@sehe,我的步骤:
- 我看了两个网页
-
update my
/proc/sys/kernel/core_pattern-
core->core_%e_%p_%t
-
ulimit -c unlimitedspawn-fcgi -a 127.0.0.1 -p 9000 -f /path/crash_demo.run-
sudo find / core_ | grep core_crash_demo- 结果
/path/core_crash_demo._5080_1652169152
- 结果
所以,我对我的问题的猜测失败了。
事实是,当我提出问题时,我不会生成core 文件。
当我生成core文件成功时,core文件路径为crash_demo.run父目录。
解决方案更新 2
我们想知道两点:
- 如何生成核心转储文件
- 如何通过核心转储文件细化异常代码
如何生成核心转储文件?
参考文件:core manual
核心手册写了很多点,我只列出我关心的点:
- 系统限制核心转储文件大小,我们需要取消限制:
-
ulimit -a检查限制/ulimit -c unlimited取消限制
- 修复
/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_
如何通过核心转储文件对异常代码进行细化?
- 我使用vscode,修复
launch.json,添加coreDumpPath,参考:https://code.visualstudio.com/docs/cpp/cpp-debug#_memory-dump-debugging
【问题讨论】:
-
我要获取崩溃核心文件。
-
Stack Overflow 是一个英文网站。见here
-
@sehe 是的,所以我用两种语言把一个问题写了两次。
标签: c++ nginx coredump spawn-fcgi