Трассировки ядра возвращают усеченное сообщение
Msgstr "Файл, возможно, усечён. Нужен по крайней мере%ld размер, но размер%ld". Может кто-нибудь помочь мне, как это сообщение вызывается? Я вижу это сообщение, когда пытаюсь собрать трассировку ядра. Может кто-нибудь объяснить, почему этот сценарий происходит, когда я пытаюсь собрать трассировку ядра?
Еще одна вещь, которую я заметил, - когда я пытаюсь собрать трассировку ядра в первый раз, я вижу вышеупомянутое сообщение. Когда я пытаюсь собрать мгновенно снова, я могу собрать журналы. Но когда я пытаюсь собрать снова через>5 минут, я вижу сообщение выше.
1 ответ
Хорошо, это поведение ядра, когда вы пытаетесь получить / собрать огромную информацию за один раз.
Как только это произойдет, в вашем случае вам нужно снова вызвать действие, которое вы сделали, чтобы ядро понимало, что вы действительно хотите отобразить эту огромную информацию. Вот почему вы можете собрать трассировку ядра со второй попытки.
Если я не ошибаюсь, то, что вы на самом деле делаете, вызывает системный вызов read(), который попытается прочитать и посчитать байты из fd в буфер, начиная с buf.
Как вы можете прочитать read_write.c из исходного кода ядра Linux, rw_verify_area
функция не любит огромные counts
, Таким образом, это ограничивает их тем, что вписывается в int
в общем. Так что он не должен будет делать проверки диапазона все время.
TL; DR
То, что вы получили, не является ошибкой, скорее всего, это функция, которая не позволяет ядру бороться с открытием огромных файлов по ошибке от пользователя. Это ограничение создано rw_verify_area
функция в ядре Linux. Таким образом, он предназначен, чтобы по крайней мере дважды вызвать системный вызов read для получения ваших данных.