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

Программа, над которой я работаю, сбой и генерирование дампов ядра. Я думаю, что проблема связана с аргументами, с которыми она вызывается, некоторые из которых автоматически генерируются другой (довольно сложной) программой. Поэтому я попытался использовать 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, которые я нашел, работают только на запущенных процессах, а не на основном файле.

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

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 ... 

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

  • debian / смотреть для Fedora
  • Как скопировать папку с удаленного компьютера в мою систему с помощью ssh или любым другим способом
  • различные контрольные суммы исходного файла и скопированного файла
  • Установка модулей отдельных модулей Yum
  • На некоторых экранах входа пользователей не отображаются цвета
  • В чем разница между командами whatis и apropos?
  • Как получить список установленных внешних модулей ядра?
  • Скрипт для проверки файловой системы только для чтения
  • Почему «make install» не производит rpm?
  • Какое устройство использует этот логический том?
  • Как отключить запрос пароля для автоматического обновления в Red Hat
  • Как контролировать «необработанный» порт подключенной сети в RedHat 4/5?
  • Linux и Unix - лучшая ОС в мире.