Segmentation fault core dump linux

Julia Evans

This week at work I spent all week trying to debug a segfault. I’d never done this before, and some of the basic things involved (get a core dump! find the line number that segfaulted!) took me a long time to figure out. So here’s a blog post explaining how to do those things!

At the end of this blog post, you should know how to go from “oh no my program is segfaulting and I have no idea what is happening” to “well I know what its stack / line number was when it segfaulted, at least!“.

what’s a segfault?

A “segmentation fault” is when your program tries to access memory that it’s not allowed to access, or tries to . This can be caused by:

  • trying to dereference a null pointer (you’re not allowed to access the memory address 0 )
  • trying to dereference some other pointer that isn’t in your memory
  • a C++ vtable pointer that got corrupted and is pointing to the wrong place, which causes the program to try to execute some memory that isn’t executable
  • some other things that I don’t understand, like I think misaligned memory accesses can also segfault

This “C++ vtable pointer” thing is what was happening to my segfaulting program. I might explain that in a future blog post because I didn’t know any C++ at the beginning of this week and this vtable lookup thing was a new way for a program to segfault that I didn’t know about.

But! This blog post isn’t about C++ bugs. Let’s talk about the basics, like, how do we even get a core dump?

step 1: run valgrind

I found the easiest way to figure out why my program is segfaulting was to use valgrind: I ran

and this gave me a stack trace of what happened. Neat!

But I also wanted to do a more in-depth investigation and find out more than just what valgrind was telling me! So I wanted to get a core dump and explore it.

How to get a core dump

A core dump is a copy of your program’s memory, and it’s useful when you’re trying to debug what went wrong with your problematic program.

When your program segfaults, the Linux kernel will sometimes write a core dump to disk. When I originally tried to get a core dump, I was pretty frustrated for a long time because – Linux wasn’t writing a core dump!! Where was my core dump.

Here’s what I ended up doing:

  1. Run ulimit -c unlimited before starting my program
  2. Run sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t

ulimit: set the max size of a core dump

ulimit -c sets the maximum size of a core dump. It’s often set to 0, which means that the kernel won’t write core dumps at all. It’s in kilobytes. ulimits are per process – you can see a process’s limits by running cat /proc/PID/limit

For example these are the limits for a random Firefox process on my system:

The kernel uses the soft limit (in this case, “max core file size = 0”) when deciding how big of a core file to write. You can increase the soft limit up to the hard limit using the ulimit shell builtin ( ulimit -c unlimited !)

kernel.core_pattern: where core dumps are written

kernel.core_pattern is a kernel parameter or a “sysctl setting” that controls where the Linux kernel writes core dumps to disk.

Kernel parameters are a way to set global settings on your system. You can get a list of every kernel parameter by running sysctl -a , or use sysctl kernel.core_pattern to look at the kernel.core_pattern setting specifically.

So sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t will write core dumps to /tmp/core-

If you want to know more about what these %e , %p parameters read, see man core.

It’s important to know that kernel.core_pattern is a global settings – it’s good to be a little careful about changing it because it’s possible that other systems depend on it being set a certain way.

kernel.core_pattern & Ubuntu

By default on Ubuntu systems, this is what kernel.core_pattern is set to

This caused me a lot of confusion (what is this apport thing and what is it doing with my core dumps??) so here’s what I learned about this:

  • Ubuntu uses a system called “apport” to report crashes in apt packages
  • Setting kernel.core_pattern=|/usr/share/apport/apport %p %s %c %d %P means that core dumps will be piped to apport
  • apport has logs in /var/log/apport.log
  • apport by default will ignore crashes from binaries that aren’t part of an Ubuntu packages

I ended up just overriding this Apport business and setting kernel.core_pattern to sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t because I was on a dev machine, I didn’t care whether Apport was working on not, and I didn’t feel like trying to convince Apport to give me my core dumps.

So you have a core dump. Now what?

Okay, now we know about ulimits and kernel.core_pattern and you have actually have a core dump file on disk in /tmp . Amazing! Now what. We still don’t know why the program segfaulted!

The next step is to open the core file with gdb and get a backtrace.

Getting a backtrace from gdb

You can open a core file with gdb like this:

Next, we want to know what the stack was when the program crashed. Running bt at the gdb prompt will give you a backtrace. In my case gdb hadn’t loaded symbols for the binary, so it was just like . . Luckily, loading symbols fixed it.

Here’s how to load debugging symbols.

This loads symbols from the binary and from any shared libraries the binary uses. Once I did that, gdb gave me a beautiful stack trace with line numbers when I ran bt .

If you want this to work, the binary should be compiled with debugging symbols. Having line numbers in your stack traces is extremely helpful when trying to figure out why a program crashed 🙂

look at the stack for every thread

Here’s how to get the stack for every thread in gdb!

gdb + core dumps = amazing

If you have a core dump & debugging symbols and gdb, you are in an amazing situation!! You can go up and down the call stack, print out variables, and poke around in memory to see what happened. It’s the best.

Читайте также:  Служба ics windows 10

If you are still working on being a gdb wizard, you can also just print out the stack trace with bt and that’s okay 🙂

Another path to figuring out your segfault is to do one compile the program with AddressSanitizer (“ASAN”) ( $CC -fsanitize=address ) and run it. I’m not going to discuss that in this post because this is already pretty long and anyway in my case the segfault disappeared with ASAN turned on for some reason, possibly because the ASAN build used a different memory allocator (system malloc instead of tcmalloc).

I might write about ASAN more in the future if I ever get it to work 🙂

getting a stack trace from a core dump is pretty approachable!

This blog post sounds like a lot and I was pretty confused when I was doing it but really there aren’t all that many steps to getting a stack trace out of a segfaulting program:

if that doesn’t work, or if you want to have a core dump to investigate:

  1. make sure the binary is compiled with debugging symbols
  2. set ulimit and kernel.core_pattern correctly
  3. run the program
  4. open your core dump with gdb , load the symbols, and run bt
  5. try to figure out what happened!!

I was able using gdb to figure out that there was a C++ vtable entry that is pointing to some corrupt memory, which was somewhat helpful and helped me feel like I understood C++ a bit better. Maybe we’ll talk more about how to use gdb to figure things out another day!

You might also like the Recurse Center, my very favorite programming community (my posts about it)

Источник

Ошибка сегментирования Ubuntu

Не всегда программы в Linux запускаются как положено. Иногда, в силу разных причин программа вместо нормальной работы выдает ошибку. Но нам не нужна ошибка, нам нужна программа, вернее, та функция, которую она должна выполнять. Сегодня мы поговорим об одной из самых серьезных и непонятных ошибок. Это ошибка сегментации Ubuntu. Если такая ошибка происходит только один раз, то на нее можно не обращать внимания, но если это регулярное явление нужно что-то делать.

Конечно, случается эта проблема не только в Ubuntu, а во всех Linux дистрибутивах, поэтому наша инструкция будет актуальна для них тоже. Но сосредоточимся мы в основном на Ubuntu. Рассмотрим что такое ошибка сегментирования linux, почему она возникает, а также как с этим бороться и что делать.

Что такое ошибка сегментации?

Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.

Чтобы понять почему так происходит, давайте рассмотрим как устроена работа с памятью в Linux, я попытаюсь все упростить, но приблизительно так оно и работает.

Допустим, в вашей системе есть 6 Гигабайт оперативной памяти, каждой программе нужно выделить определенную область, куда будет записана она сама, ее данные и новые данные, которые она будет создавать. Чтобы дать возможность каждой из запущенных программ использовать все шесть гигабайт памяти был придуман механизм виртуального адресного пространства. Создается виртуальное пространство очень большого размера, а из него уже выделяется по 6 Гб для каждой программы. Если интересно, это адресное пространство можно найти в файле /proc/kcore, только не вздумайте никуда его копировать.

Выделенное адресное пространство для программы называется сегментом. Как только программа попытается записать или прочитать данные не из своего сегмента, ядро отправит ей сигнал SIGSEGV и программа завершится с нашей ошибкой. Более того, каждый сегмент поделен на секции, в некоторые из них запись невозможна, другие нельзя выполнять, если программа и тут попытается сделать что-то запрещенное, мы опять получим ошибку сегментации Ubuntu.

Почему возникает ошибка сегментации?

И зачем бы это порядочной программе лезть, куда ей не положено? Да в принципе, незачем. Это происходит из-за ошибки при написании программ или несовместимых версиях библиотек и ПО. Часто эта ошибка встречается в программах на Си или C++. В этом языке программисты могут вручную работать с памятью, а язык со своей стороны не контролирует, чтобы они это делали правильно, поэтому одно неверное обращение к памяти может обрушить программу.

Почему может возникать эта ошибка при несовместимости библиотек? По той же причине — неверному обращению к памяти. Представим, что у нас есть библиотека linux (набор функций), в которой есть функция, которая выполняет определенную задачу. Для работы нашей функции нужны данные, поэтому при вызове ей нужно передать строку. Наша старая версия библиотеки ожидает, что длина строки будет до 256 символов. Но программа была обновлена формат записи поменялся, и теперь она передает библиотеке строку размером 512 символов. Если обновить программу, но оставить старую версию библиотеки, то при передаче такой строки 256 символов запишутся нормально в подготовленное место, а вот вторые 256 перезапишут данные программы, и возможно, попытаются выйти за пределы сегмента, тогда и будет ошибка сегментирования linux.

Что делать если возникла ошибка сегментирования?

Если вы думаете, что это ошибка в программе, то вам остается только отправить отчет об ошибке разработчикам. Но вы все-таки еще можете попытаться что-то сделать.

Например, если падает с ошибкой сегментации неизвестная программа, то мы можем решить что это вина разработчиков, но если с такой ошибкой падает chrome или firefox при запуске возникает вопрос, может мы делаем что-то не так? Ведь это уже хорошо протестированные программы.

Первое, что нужно сделать — это обновить систему до самой последней версии, возможно, был баг и его уже исправили, а может у вас установлены старые версии библиотек и обновление решит проблему. В Ubuntu это делается так:

sudo apt update
sudo apt full-upgrade

Если это не помогло, нужно обнулить настройки программы до значений по умолчанию, возможно, удалить кэш. Настройки программ в Linux обычно содержатся в домашней папке, скрытых подкаталогах с именем программы. Также, настройки и кэш могут содержаться в каталогах

/.cache. Просто удалите папки программы и попробуйте снова ее запустить. Если и это не помогло, вы можете попробовать полностью удалить программу, а потом снова ее установить, возможно, какие-нибудь зависимости были повреждены:

sudo apt remove пакет_программы
sudo apt autoremove
sudo apt install пакет_программы

Если есть возможность, попробуйте установить программу из другого источника, например, не из PPA, а более старую версию, из официальных репозиториев.

Когда вы все это выполнили, скорее всего, проблема не в вашем дистрибутиве, а в самой программе. Нужно отправлять отчет разработчикам. В Ubuntu это можно сделать с помощью программы apport-bug. Обычно Ubuntu предлагает это сделать сразу, после того как программа завершилась с ошибкой сегментирования. Если же ошибка сегментирования Ubuntu встречается не в системной программе, то вам придется самим искать разработчиков и вручную описывать что произошло.

Чтобы помочь разработчикам решить проблему, недостаточно отправить им только сообщение что вы поймали Segmentation Fault, нужно подробно описать проблему, действия, которые вы выполняли перед этим, так чтобы разработчик мог их воспроизвести. Также, желательно прикрепить к отчету последние функции, которые вызывала программа (стек вызовов функций), это может очень сильно помочь разработчикам.

Читайте также:  Ezcast для windows 10 что это

Рассмотрим, как его получить. Это не так уж сложно. Сначала запустите вашу программу, затем узнайте ее PID с помощью команды:

Дальше запускаем отладчик gdb:

Подключаемся к программе:

(gdb) attach ваш_pid

После подключения программа станет на паузу, продолжаем ее выполнение командой:

Затем вам осталось только вызвать ошибку:

И набрать команду, которая выведет стек последних вызовов:

Вывод этой команды и нужно отправлять разработчикам. Чтобы отключиться от программы и выйти наберите:

(gdb) detach
(gdb) quit

Дальше остается отправить отчет и ждать исправления ошибки. Если вы не уверены, что ошибка в программе, можете поспрашивать на форумах. Когда у вас есть стек вызовов, уже можно попытаться, если не понять в чем проблема, то попытаться узнать, не сталкивался ли с подобной проблемой еще кто-то.

Выводы

Теперь у вас есть приблизительный план действий, что нужно делать, когда появляется ошибка сегментирования сделан дамп памяти ubuntu. Если вы знаете другие способы решить эту проблему, напишите в комментариях!

Оцените статью:

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

7 комментариев

Спасибо, было очень интересно почитать про отладчик.

На самом деле от этого избавится я не могу. Остаётся мне всё сваливать на свой старый компьютер с 1024 мегабайтами озу. Постоянные ошибки сегментирования когда комплимирую какую-либо программу. Чтобы скомплимировать ядро надо по миллиону раз вводить make!! Щас выкину комп и куплю новый и думаю проблема сама разрешится.

Gentoo. cmake 3.14.6. Segmentation fault.
Xeon 2620 v2 24Gb ram

Проблема сама не решается почему-то. 8-(

Здравствуйте! Я скачал программу для видеонаблюдения, называется motion (https://ru.wikipedia.org/wiki/Motion_(программа_видеонаблюдения) . Минут 5 она работает нормально после чего возникает такая ошибка: Ошибка сегментирования (стек памяти сброшен на диск) и программа прекращает работать. Скажите, можно ли самому исправить эту ошибку? Полный вывод:

[XakeP sasha]# motion -n
[162326040:motion] [NTC] [ALL] conf_load: Processing thread 0 — config file /etc/motion/motion.conf
[162326040:motion] [NTC] [ALL] motion_startup: Motion 4.0.1 Started
[162326040:motion] [NTC] [ALL] motion_startup: Logging to syslog
[162326040:motion] [NTC] [ALL] motion_startup: Using log type (ALL) log level (NTC)
[162326040:motion] [NTC] [ENC] ffmpeg_init: ffmpeg libavcodec version 57.64.100 libavformat version 57.56.100
[0:motion] [NTC] [ALL] main: Camera 0 is from /etc/motion/motion.conf
[0:motion] [NTC] [ALL] main: Camera 0 is device: /dev/video0 input -1
[0:motion] [NTC] [ALL] main: Stream port 8081
[0:motion] [NTC] [ALL] main: Waiting for threads to finish, pid: 1198
[1:ml1] [NTC] [ALL] motion_init: Camera 0 started: motion detection Enabled
[1:ml1] [NTC] [VID] vid_v4lx_start: Using videodevice /dev/video0 and input -1
[0:web_control] [NTC] [STR] http_bindsock: listening on 127.0.0.1 port 8080
[0:web_control] [NTC] [STR] httpd_run: Started motion-httpd server on port 8080 (auth Disabled)
[1:ml1] [NTC] [VID] v4l2_get_capability:
————————
cap.driver: «uvcvideo»
cap.card: «UVC Camera (046d:080a)»
cap.bus_info: «usb-0000:00:1d.0-1.3»
cap.capabilities=0x84200001
————————
[1:ml1] [NTC] [VID] v4l2_get_capability: — VIDEO_CAPTURE
[1:ml1] [NTC] [VID] v4l2_get_capability: — STREAMING
[1:ml1] [NTC] [VID] v4l2_select_input: name = «Camera 1», type 0x00000002, status 00000000
[1:ml1] [NTC] [VID] v4l2_select_input: — CAMERA
[1:ml1] [WRN] [VID] v4l2_select_input: Device doesn’t support VIDIOC_G_STD
[1:ml1] [NTC] [VID] v4l2_set_pix_format: Config palette index 17 (YU12) doesn’t work.
[1:ml1] [NTC] [VID] v4l2_set_pix_format: Supported palettes:
[1:ml1] [NTC] [VID] v4l2_set_pix_format: (0) YUYV (YUYV 4:2:2)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: 0 — YUYV 4:2:2 (compressed : 0) (0x56595559)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: (1) MJPG (Motion-JPEG)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: 1 — Motion-JPEG (compressed : 1) (0x47504a4d)
[1:ml1] [NTC] [VID] v4l2_set_pix_format Selected palette YUYV
[1:ml1] [NTC] [VID] v4l2_do_set_pix_format: Testing palette YUYV (1280×720)
[1:ml1] [NTC] [VID] v4l2_do_set_pix_format: Using palette YUYV (1280×720) bytesperlines 2560 sizeimage 1843200 colorspace 00000008
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980900, «Brightness», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Brightness», default 128, current 128
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980901, «Contrast», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Contrast», default 32, current 32
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980902, «Saturation», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Saturation», default 28, current 28
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980918, «Power Line Frequency», range 0,2
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Power Line Frequency», default 2, current 2
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980913, «Gain», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Gain», default 0, current 0
[1:ml1] [NTC] [VID] vid_v4lx_start: Using V4L2
[1:ml1] [NTC] [ALL] image_ring_resize: Resizing pre_capture buffer to 1 items
[1:ml1] [NTC] [VID] v4l2_set_control: setting control «Contrast» to 69 (ret -1 Input/output error)
[1:ml1] [NTC] [VID] v4l2_set_control: setting control «Saturation» to 19 (ret -1 Input/output error)
[1:ml1] [NTC] [STR] http_bindsock: listening on 127.0.0.1 port 8081
[1:ml1] [NTC] [ALL] motion_init: Started motion-stream server on port 8081 (auth Disabled)
[1:ml1] [NTC] [EVT] event_new_video Source FPS 5
[1:ml1] [NTC] [ENC] ffmpeg_open Selected Output FPS 5
[1:ml1] [NTC] [ENC] ffmpeg_avcodec_log: Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
[1:ml1] [NTC] [EVT] event_newfile: File of type 8 saved to: ./01-20170320090548.avi
[1:ml1] [NTC] [ALL] motion_detected: Motion detected — starting event 1
[1:ml1] [NTC] [ALL] preview_save: different filename or picture only!
[1:ml1] [NTC] [EVT] event_newfile: File of type 1 saved to: ./01-20170320090548-01.jpg
[1:ml1] [NTC] [ALL] motion_loop: End of event 1
[1:ml1] [NTC] [EVT] event_new_video Source FPS 5
[1:ml1] [NTC] [ENC] ffmpeg_open Selected Output FPS 5
[1:ml1] [NTC] [ENC] ffmpeg_avcodec_log: Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
[1:ml1] [NTC] [EVT] event_newfile: File of type 8 saved to: ./02-20170320091023.avi
[1:ml1] [NTC] [ALL] motion_detected: Motion detected — starting event 2
[1:ml1] [ERR] [VID] v4l2_next: VIDIOC_QBUF: No such device
[1:ml1] [ERR] [ALL] motion_loop: Video device fatal error — Closing video device
[1:ml1] [NTC] [VID] vid_close: Closing video device /dev/video0
[1:ml1] [WRN] [ALL] motion_loop: Retrying until successful connection with camera
[1:ml1] [NTC] [VID] vid_v4lx_start: Using videodevice /dev/video0 and input -1
[1:ml1] [NTC] [VID] v4l2_get_capability:
————————
cap.driver: «uvcvideo»
cap.card: «UVC Camera (046d:080a)»
cap.bus_info: «usb-0000:00:1d.0-1.3»
cap.capabilities=0x84200001
————————
[1:ml1] [NTC] [VID] v4l2_get_capability: — VIDEO_CAPTURE
[1:ml1] [NTC] [VID] v4l2_get_capability: — STREAMING
[1:ml1] [NTC] [VID] v4l2_select_input: name = «Camera 1», type 0x00000002, status 00000000
[1:ml1] [NTC] [VID] v4l2_select_input: — CAMERA
[1:ml1] [WRN] [VID] v4l2_select_input: Device doesn’t support VIDIOC_G_STD
[1:ml1] [NTC] [VID] v4l2_set_pix_format: Config palette index 17 (YU12) doesn’t work.
[1:ml1] [NTC] [VID] v4l2_set_pix_format: Supported palettes:
[1:ml1] [NTC] [VID] v4l2_set_pix_format: (0) YUYV (YUYV 4:2:2)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: 0 — YUYV 4:2:2 (compressed : 0) (0x56595559)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: (1) MJPG (Motion-JPEG)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: 1 — Motion-JPEG (compressed : 1) (0x47504a4d)
[1:ml1] [NTC] [VID] v4l2_set_pix_format Selected palette YUYV
[1:ml1] [NTC] [VID] v4l2_do_set_pix_format: Testing palette YUYV (1280×720)
[1:ml1] [NTC] [VID] v4l2_do_set_pix_format: Using palette YUYV (1280×720) bytesperlines 2560 sizeimage 1843200 colorspace 00000008
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980900, «Brightness», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Brightness», default 128, current 128
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980901, «Contrast», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Contrast», default 32, current 32
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980902, «Saturation», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Saturation», default 28, current 28
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980918, «Power Line Frequency», range 0,2
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Power Line Frequency», default 2, current 2
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980913, «Gain», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Gain», default 0, current 32
[1:ml1] [NTC] [VID] vid_v4lx_start: Using V4L2
[1:ml1] [NTC] [VID] v4l2_set_control: setting control «Contrast» to 69 (ret -1 Input/output error)
[1:ml1] [NTC] [VID] v4l2_set_control: setting control «Saturation» to 19 (ret -1 Input/output error)
[1:ml1] [ERR] [VID] v4l2_next: VIDIOC_QBUF: No such device
[1:ml1] [ERR] [ALL] motion_loop: Video device fatal error — Closing video device
[1:ml1] [NTC] [VID] vid_close: Closing video device /dev/video0
[1:ml1] [WRN] [ALL] motion_loop: Retrying until successful connection with camera
[1:ml1] [NTC] [VID] vid_v4lx_start: Using videodevice /dev/video0 and input -1
[1:ml1] [ALR] [VID] vid_v4lx_start: Failed to open video device /dev/video0: No such file or directory
[1:ml1] [WRN] [ALL] motion_loop: Retrying until successful connection with camera
[1:ml1] [NTC] [VID] vid_v4lx_start: Using videodevice /dev/video0 and input -1
[1:ml1] [ALR] [VID] vid_v4lx_start: Failed to open video device /dev/video0: No such file or directory
[1:ml1] [WRN] [ALL] motion_loop: Retrying until successful connection with camera
[1:ml1] [NTC] [VID] vid_v4lx_start: Using videodevice /dev/video0 and input -1
[1:ml1] [NTC] [VID] v4l2_get_capability:
————————
cap.driver: «uvcvideo»
cap.card: «UVC Camera (046d:080a)»
cap.bus_info: «usb-0000:00:1d.0-1.3»
cap.capabilities=0x84200001
————————
[1:ml1] [NTC] [VID] v4l2_get_capability: — VIDEO_CAPTURE
[1:ml1] [NTC] [VID] v4l2_get_capability: — STREAMING
[1:ml1] [NTC] [VID] v4l2_select_input: name = «Camera 1», type 0x00000002, status 00000000
[1:ml1] [NTC] [VID] v4l2_select_input: — CAMERA
[1:ml1] [WRN] [VID] v4l2_select_input: Device doesn’t support VIDIOC_G_STD
[1:ml1] [NTC] [VID] v4l2_set_pix_format: Config palette index 17 (YU12) doesn’t work.
[1:ml1] [NTC] [VID] v4l2_set_pix_format: Supported palettes:
[1:ml1] [NTC] [VID] v4l2_set_pix_format: (0) YUYV (YUYV 4:2:2)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: 0 — YUYV 4:2:2 (compressed : 0) (0x56595559)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: (1) MJPG (Motion-JPEG)
[1:ml1] [NTC] [VID] v4l2_set_pix_format: 1 — Motion-JPEG (compressed : 1) (0x47504a4d)
[1:ml1] [NTC] [VID] v4l2_set_pix_format Selected palette YUYV
[1:ml1] [NTC] [VID] v4l2_do_set_pix_format: Testing palette YUYV (1280×720)
[1:ml1] [NTC] [VID] v4l2_do_set_pix_format: Using palette YUYV (1280×720) bytesperlines 2560 sizeimage 1843200 colorspace 00000008
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980900, «Brightness», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Brightness», default 128, current 128
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980901, «Contrast», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Contrast», default 32, current 32
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980902, «Saturation», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Saturation», default 28, current 28
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980918, «Power Line Frequency», range 0,2
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Power Line Frequency», default 2, current 2
[1:ml1] [NTC] [VID] v4l2_scan_controls: found control 0x00980913, «Gain», range 0,255
[1:ml1] [NTC] [VID] v4l2_scan_controls: «Gain», default 0, current 32
[1:ml1] [NTC] [VID] vid_v4lx_start: Using V4L2
[1:ml1] [NTC] [VID] v4l2_set_control: setting control «Contrast» to 69 (ret 0 )
[1:ml1] [NTC] [VID] v4l2_set_control: setting control «Saturation» to 19 (ret 0 )
[1:ml1] [ERR] [ENC] ffmpeg_avcodec_log: Too large number of skipped frames 87374 > 60000
[1:ml1] [ERR] [ENC] ffmpeg_put_frame: Error while writing video frame: Invalid argument
[1:ml1] [NTC] [ALL] motion_loop: Thread exiting
[1:ml1] [NTC] [STR] stream_stop: Closing motion-stream listen socket & active motion-stream sockets
[1:ml1] [NTC] [STR] stream_stop: Closed motion-stream listen socket & active motion-stream sockets
Ошибка сегментирования (стек памяти сброшен на диск)

Читайте также:  Bodhi linux по русски

С ошибкой SIGSEGV или так называемой ошибкой сегментации(на самом деле это ошибки обращения с памятью) вы ничё не сможете сделать. если вы юзер, а не разработчик и она возникает в вашей проге. можете только одного не запускать эту прогу удалить её или попытаться обновить, возможно(вовсе не обязательно!) её заметили и исправили. Но вообще лицензионное соглашение по Ubuntu вас предупреждает, что вы пользуетесь системой в которой софт вовсе не обязан работать и никто за это не отвечает. вы это делаете на свой страх и риск! это краткий его перевод. А если вы купили операционку заплатили бабки и заказали техподдержку, то вы тогда уже имеете право обратиться в службу тех поддержки сообщить баг, где и как он возникает и они обязаны не просто испавить его прислав патч, но так же всем таким как вы кто заплатил. Иначе вы имеете право подать на них в суд и они обязаны компенсировать вам убытки. Но это не Ubuntu. Обратная сторона медали свободного по и бесплатных операционок. среди Линуксовых есть AIX(только платная+ техподдержка), SUSE(не путать с Open Suse) и Debian(есть free урезаный вариант и нормальный платный). Это оч серьёзная ошибка краеугольный камень всех программ и работы компа в целом. Если это ломается, то всё летит к чёрту. Конечно они стараюстся и сразу посылать вас не будут. Это их репутация! но вообще дело в програмерах. Щаз стало оч много криворуких. Вот я смотрю на их код и удивляюсь, как можно так безалаберно писать проги! Если бы вы только это видели вы бы не удивились почему всё так плохо работает. Встречаются такие кадры которые всё только портят! ну а что програмеров не хаватет, делать надо много вот и берут всех подряд. А потом начинается. Если конечно это заметили до релиза, то ладно. Но тут всё ещё зависит от тестеров. Если они хорошие то найдут баги вовремя до релиза и исправят. но у нас как бывает. Отдела тестирования нет, сэкономили.. Тестер дай бог 2-3 а то часто 1 вообще. В программе всегда много ошибок. Особенно вначале. все мы ошибаемся, особенно некоторые. Причина? Нехватка мозгов или банально невнимательность. поэтому все проги должны быть тщательнейшим образом оттестированы. только тогда она может быть допущена к релизу. А ещё заказчик подгоняет. Хорошую прогу нельзя написать в спешке. тем более большую. Такие ошибки как оч трудно найти, а если она не всегда воспроизводится, так вообще нереально, Если только случайно наткнёшься. Потому что как бывает один раз вылетела, а второй нет и пошла дальше и норм. Или пошла дальше и всё стало неправильным. с програмой начинают твориться чудеса. это всё та же ошибка с памятью, которая всё портит. Вылететь может не только ваша прога но и вся система. Но даже если она стабильно воспроизводится, то на её поиск может понадобиться дни а может и неделя две кропотливой упорной работы, носящей изнуряющий характер. искать будут всем отделом. но её тогда по крайней мере можно найти. а если нет. то вам поможет только чудо. А уж что сделают после этого с тем кто это сделал я даже не знаю! Вот такие вот они эти ошибки сегментации. Я показал то что там происходит за кадром юзера.

У меня появляется такая ошибка при попытке запуска Viber

Источник

Оцените статью