LINUX.ORG.RU

Найти ошибку: Fatal Python error: Segmentation fault

 , , ,


0

1

В питоновской программе выводится: Fatal Python error: Segmentation fault

Поставил sys.settrace() на главную процедуру программы, более подробным дамп не стал.

Какая обычно методика отлавливания таких ошибок?

Иногда выдаёт также:

Thread 0x00ffffff (most recent call first):
Segmentation fault
munmap_chunk(): invalid pointer

Проверять работу под gdb кажется как-то сложным, т.к. ошибка вылетает при запуске p = subprocess.Popen() … + os.kill(p.pid) …

P. S. return codes подпроцесса бывают разными = -4, -11, -15.



Последнее исправление: i_am_not_ai (всего исправлений: 2)

Мне кажется, что кроме gdb вариантов нет. И по идее порождённый процесс не может вызывать такую ошибку, может быть, она вообще не с этим связана.

Для начала в gdb отладить без follow-fork, потом не знаю, с такими ошибками никогда не сталкивался.

emorozov
()

Не разбирался с архитектурой Python.
Иногда проекты предоставляют возможность использования расширенной трассировки, выполняемого API.
Может быть и в Python такая фича имеется.

Forum0888
()
Ответ на: комментарий от Forum0888
dmesg:

alloc_contig_range: [24a00, 25108) PFNs busy
alloc_contig_range: [24a00, 25208) PFNs busy
alloc_contig_range: [24c00, 25308) PFNs busy
alloc_contig_range: [24d00, 25408) PFNs busy
alloc_contig_range: [24e00, 25508) PFNs busy
alloc_contig_range: [24a00, 24eff) PFNs busy
alloc_contig_range: [24c00, 24d8a) PFNs busy
alloc_contig_range: [24d00, 24e8a) PFNs busy
alloc_contig_range: [24c00, 24d8a) PFNs busy
alloc_contig_range: [24d00, 24e8a) PFNs busy

С этой багой уже полтора года живу, не мог понять суть. Видимо, связано с VPU, подпроцесс на нём видео запускает.

i_am_not_ai
() автор топика
Ответ на: комментарий от i_am_not_ai

Ответы на поиск «alloc_contig_range: [24a00, 25108) PFNs busy Python» в inet читали?

Вот один из ответов:

I faced a similar issue, where some PFNs of a zone were not assigned to the same node, leading to different zones for the PFNs and a failing zone check. See this fix:

http://www.spinics.net/lists/arm-kernel/msg535191.html

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 3)
Ответ на: комментарий от Forum0888

Попробовал пропатчить (может быть, неверно):

--- arch/arm/mm/init.c.orig
+++ arch/arm/mm/init.c
@@ -195,7 +195,7 @@
 #ifdef CONFIG_HAVE_ARCH_PFN_VALID
 int pfn_valid(unsigned long pfn)
 {
-	return memblock_is_map_memory(__pfn_to_phys(pfn));
+	return memblock_is_memory(__pfn_to_phys(pfn));
 }
 EXPORT_SYMBOL(pfn_valid);
 #endif

--- arch/arm/mm/ioremap.c.orig
+++ arch/arm/mm/ioremap.c
@@ -300,7 +300,7 @@
 	 * Don't allow RAM to be mapped with mismatched attributes - this
 	 * causes problems with ARMv6+
 	 */
-	if (WARN_ON(pfn_valid(pfn) && mtype != MT_MEMORY_RW))
+	if (WARN_ON(memblock_is_map_memory(pfn) && mtype != MT_MEMORY_RW))
 		return NULL;
 
 	area = get_vm_area_caller(size, VM_IOREMAP, caller);

Ошибки с PFN не ушли. Буду понижать уровень привилегий видеоплеера.

i_am_not_ai
() автор топика

Ради фана в https://www.phind.com/ сделайте запрос «Fatal Python error: Segmentation fault».

Ниже небольшая часть текста из ответа:

Add sys.settrace at the very first line of the code.

Use gdb/lldb to run the Python script.

Wait for the segmentation fault to occur.

Use the backtrace command to see the stack trace of the C code where the error occurred.

Using faulthandler: faulthandler is a built-in module since Python 3.3 that can be used to debug segmentation faults [1]. It can also be installed in Python 2.7 using pip [1]. To use faulthandler, you can enable it in your code using the following code snippet:

import faulthandler

faulthandler.enable()
// bad code goes here

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от i_am_not_ai

Жаль, квест то интересный и его прохождение было бы полезно и для других.

Может вопрос разработчикам плеера задать?

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от Forum0888

Может вопрос разработчикам плеера задать?

Да вроде решил вопрос. Стал присылать SIGINT вместо SIGTERM плееру - он стал завершаться корректно, не портит память. Пока всё норм.

i_am_not_ai
() автор топика
Ответ на: комментарий от Forum0888

как была решена проблема

Хотя, я не прав. Снова грохнулось, продолжаю разбираться.

Предполагаю, что нарушена логика запуска - запустилось две копии плеера, и они начали конфликтовать.

i_am_not_ai
() автор топика
Последнее исправление: i_am_not_ai (всего исправлений: 1)