Восстановить полную команду, сгенерированную дампом ядра

Программа, над которой я работаю, сбой и генерирование дампов ядра. Я думаю, что проблема связана с аргументами, с которыми она вызывается, некоторые из которых автоматически генерируются другой (довольно сложной) программой. Поэтому я попытался использовать gdb для отладки или file core.MyApplication.1234 чтобы получить аргументы.

Однако команда довольно длинная, и результат выглядит примерно так:

 core.MyApplication.1234: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './MyApplication -view -mwip localhost -mwnp 12345 -mwlp 12346 -mwti 12347 -Debu' 

(Я изменил имена для этого примера, но вы поняли эту идею.)

Я знаю, что после этого было несколько аргументов, но в основных файлах команда всегда усекается с 80 символами. Оба gdb и file сообщают об этом. Глядя на вывод objdump я не уверен, что остальные были даже записаны в дамп ядра, потому что он, похоже, отключается после «-Debu».

Я запускаю это на RHEL6. Я нашел эту pargs с 2007 года, описывая решение для систем Solaris с использованием pargs , но это не действительная команда в моей системе, а эквиваленты Red Hat, которые я нашел, работают только на запущенных процессах, а не на основном файле.

Как я могу восстановить всю команду, используемую для запуска программы? Возможно ли это?

  • Эквивалент обновления-grub для систем RHEL / Fedora / CentOS?
  • Установка Apache HTTPD RPM на автономном сервере RHEL 7.2
  • Невозможно настроить квоты в RHEL6 и CentOS6- quotecheck возвращает сообщение об ошибке
  • Как разрешить 'netlink: осталось 12 байтов после разбора атрибутов.' в syslog на Red Hat Enterprise Linux 6.5?
  • В чем смысл «инициализации червя ...» на выходе dmesg?
  • Установить значения по умолчанию в чашках?
  • Как узнать, какой Linux и какая версия я использую
  • Установка модулей отдельных модулей Yum
  • One Solution collect form web for “Восстановить полную команду, сгенерированную дампом ядра”

    Данные есть (по крайней мере, до 999 записей на сумму не менее 6885 байт пронумерованных бластов):

     > cat segfault.c int main(int argc, char *argv[]) { char *s = "hello world"; *s = 'H'; } > cc -g -o segfault segfault.c > limit coredumpsize 9999999 > ./segfault `perl -le 'print "blah$_" for 1..999'` Segmentation fault (core dumped) > strings core.12231 | grep -c blah 1000 

    Затем с быстрым altagoobingleducking из gdb , и принимая символы отладки, это можно восстановить через что-то вроде:

     > gdb ./segfault core.12231 ... (gdb) p argc $1 = 1000 (gdb) x/1000s *argv ... 

    Другой вариант – использовать простую оболочку оболочки, которая записывает "$@" где-нибудь, а затем выполняет правильную программу с данными аргументами.

    Interesting Posts

    Как добавить определенные каталоги в путь «updatedb» (найти)?

    Неудовлетворительные зависимости после использования репозитория backports

    OpenBSD 6.0 ntpctl говорит «синхронизированный синхронизированный», но составляет ~ 26 секунд позади

    LD_PRELOAD или аналогично предупреждать пользователя об изменениях в файле?

    Проверка времени с помощью регулярного выражения

    Серия вопросов по скриптам ebuild. Учитывая исходный отрывок и вопросы

    Подготовить имя файла с помощью команды find

    отправить нажатие клавиши для обработки

    RHEL: справочная страница для файлов конфигурации интерфейса

    , вернется один или два дня. Просмотр разных флагов

    Какое правильное определение FOSS?

    Обнаружение размера файла и операция условно

    Убедитесь, что только члены группы могут обращаться к определенному диску

    Как обрабатывать символ пробела при вводе пользователем

    рекурсивно изменять разрешение файла, но не каталоги?

    Linux и Unix - лучшая ОС в мире.