sho*_*der 23 .net linux dump .net-core
我有一个.NET应用程序,我已移植到.NET Core.我在Ubuntu 14.04上测试它.
我试图弄清楚如何在程序崩溃时获取.dmp文件或Linux等效文件.我打电话,Environment.FailFast
但据我所知,这不会像在Windows上那样生成.dmp文件.根据这种情况 Environment.FailFast
应该创建一个转储,但如果它是我找不到它.
另外我尝试使用手动创建转储gcore
.这可行但是生成转储需要很长时间(我的应用程序不是那么大)并且我无法在gdb之后获得正确的callstacks,因为当我将gdb指向我的应用程序时它无法识别它.
在Linux上获取.NET Core应用程序转储的最佳方法是什么?
谢谢!
linux coredumps 的生成由/proc/sys/kernel/core_pattern
. 如果某些信号(例如SIGSEGV
或SIGQUIT
)导致进程终止,则进程内存的映像基本上会写入该文件。如果它以管道符号开头|
,则可以将其流式传输到执行转储分析的应用程序中。它记录在这里:http : //man7.org/linux/man-pages/man5/core.5.html
如果你这样配置:
echo coredump > /proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)
它会将一个名为的文件写入coredump
当前目录。
如果你这样配置:
echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)
它将创建一个文件/tmp/cores/core.bash.8539.drehbahn-mbp.1236975953
(参见https://sigquit.wordpress.com/2009/03/13/the-core-pattern/)
正如其他人所建议的,也设置ulimit -S -c unlimited
为允许任何大小的核心转储。
这是一篇博客文章,展示了如何在 linux 下创建和分析 .NET Core coredumps:http : //blogs.microsoft.co.il/sasha/2017/02/26/analyzing-a-net-core-core-转储到 linux/
你想要一个核心转储,这是内置于操作系统中的。
首先ulimit -Sc unlimited
,作为您想要运行该进程的用户,以便允许创建任何大小的核心文件。然后kill -4 <pid>
这应该生成核心转储。它可能应该位于运行进程的目录中。
如果您无法以应用程序运行的用户身份登录,则需要将其放入 limit.conf 中。