Подтвердить что ты не робот

Как сбросить приложение .NET Core в Linux

У меня есть приложение .NET, которое я портировал на .NET Core. Я тестирую его на Ubuntu 14.04.

Я пытаюсь выяснить, как получить файл .dmp или эквивалент Linux при сбое программы. Я называю Environment.FailFast, но, насколько я могу судить, это не создает файл .dmp, как в Windows. В соответствии с этот случай Environment.FailFast должен быть создан дамп, но если это не удается найти.

Кроме того, я попытался вручную создать дамп, используя gcore. Это работает, однако для создания дампа требуется много времени (мое приложение не так уж и много), и я не могу получить правильные вызовы в gdb после факта, как когда я указываю gdb на свою прикладную dll, он не распознает его.

Каков наилучший способ получить дамп приложения .NET Core в Linux?

Спасибо!

4b9b3361

Ответ 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/