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

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

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

  • Как узнать, какой Linux и какая версия я использую
  • Почему теоретический предел RAM для RHEL 6 128 TB и как это определяется?
  • Создать ссылку URL в меню
  • Как установить значение для mteHotContextName при использовании процесса мониторинга в SNMP
  • Установите конкретный выпуск точки RHEL
  • Не удалось открыть / dev / vmmon: нет такого файла или каталога
  •  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, которые я нашел, работают только на запущенных процессах, а не на основном файле.

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

  • RHEL6 Не удается запустить мой скрипт при завершении работы и перезагрузке
  • Написание триггеров для mcelog
  • Не удается пройти EFI для установки RHEL на сервер HP Itanium
  • «Git clone» с ошибкой 443
  • 200 мс между TCP send и tcpdump только с большими сообщениями
  • SELinux httpd записывает доступ к каталогу
  • 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 ... 

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

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