Как сбросить приложение .NET Core в Linux
У меня есть приложение .NET, которое я портировал на .NET Core. Я тестирую его на Ubuntu 14.04.
Я пытаюсь выяснить, как получить файл .dmp или эквивалент Linux при сбое программы. Я называю Environment.FailFast
, но, насколько я могу судить, это не создает файл .dmp, как в Windows. В соответствии с этот случай Environment.FailFast
должен быть создан дамп, но если это не удается найти.
Кроме того, я попытался вручную создать дамп, используя gcore
. Это работает, однако для создания дампа требуется много времени (мое приложение не так уж и много), и я не могу получить правильные вызовы в gdb после факта, как когда я указываю gdb на свою прикладную dll, он не распознает его.
Каков наилучший способ получить дамп приложения .NET Core в Linux?
Спасибо!
Ответы
Ответ 1
вам нужен основной дамп, он встроен в ОС.
сначала ulimit -Sc unlimited
как пользователь, который вы хотите запустить процесс, так как это позволяет создавать файл ядра любого размера.
Тогда kill -4 <pid>
Это должно генерировать дамп ядра.
Вероятно, это должно быть в каталоге, в котором был запущен процесс.
Если вы не можете войти в систему как пользователь, с которым работает приложение, вам нужно поместить его в файл limits.conf.
Ответ 2
Генерация исходных ядер linux определяется тем, что в /proc/sys/kernel/core_pattern
. Если определенные сигналы (например, SIGSEGV или SIGQUIT) приводят к завершению процесса, образ памяти процесса в основном записывается в этот файл. Если он начинается с символа трубы |
, он может быть передан в приложение, которое выполняет анализ дампа. Это описано здесь: http://man7.org/linux/man-pages/man5/core.5.html
Если вы настроите его так:
echo coredump > /proc/sys/kernel/core_pattern
он напишет файл с именем coredump
в текущий каталог.
Если вы настроите его так:
echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
Он создаст файл типа /tmp/cores/core.bash.8539.drehbahn-mbp.1236975953
(см. https://sigquit.wordpress.com/2009/03/13/the-core-pattern/)
Как и другие, также установите ulimit -S -c unlimited
, чтобы разрешить выпучивание любых размеров.
Вот блог-сообщение, в котором показано, как создавать и анализировать .NET Core coredumps под linux: http://blogs.microsoft.co.il/sasha/2017/02/26/analyzing-a-net-core-core-dump-on-linux/