|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|||||||||||||||||||||
проблемы с созданием "правильного" core dump'а01.01.2012, 13:42. Показов 3720. Ответов 8
Метки нет (Все метки)
Суть проблемы
При попытке создать с помощью gdb дамп памяти программы, которая в этот момент выполняет системный вызов, я получаю весьма бесполезный core, в котором, насколько я понимаю, не содержится информации, относящейся к моей программе, а содержится лишь часть, относящаяся к системному вызову. Не по теме: Вообще, я в матчасти не очень силен и, возможно, порю несусветную чушь. Потому ниже привожу подробное описание того, что я делаю, что я получаю и чем я не доволен. подробное описание под катом
Берем простенькую программку, которая будет засыпать после выполнения system("sleep 1000").
Теперь откроем сохраненный дамп и поглядим еще раз.
Толку от такого дампа я не вижу и меня это огорчает. Вопросы
PostScriptum
Если в приведенной выше программе модифицировать func1 (убрать системный вызов):
1
|
|||||||||||||||||||||
| 01.01.2012, 13:42 | |
|
Ответы с готовыми решениями:
8
Проблемы с созданием объектов Проблемы с созданием объекта Проблемы с созданием Ln логарифма |
|
|
|||||||||||
| 01.01.2012, 14:32 | |||||||||||
Сообщение было отмечено как решение
Решение
Для порядку ещё сделай оригинальную (общую) постановку задачи. Что конкретно ты хочешь сделать?
Добавлено через 7 минут Сделел немного на своём примере, но приниципальной сути не изменилось. После загрузки коры получил почти нормальный стек:
Вопросительные знаки на месте функций из динамических библиотек - это нормальное явление и вот почему. 1. Если запустить программу непосредственно из gdb, то gdb умеет перехватывать ситуации загрузки динамической библиотеки в память в момент запуска отлаживаемого приложения. И поэтому при печати стека gdb знает, какие адреса, соответствующие динамическим библиотекам, к какой конкретно библиотеке относятся (и из этого уже может вычислить конкретную функцию динамической библиотеки). 2. Если gdb приаттачивается к запущенному процессу, то я не знаю, откуда он выцепляет информацию о загруженных динамических библиотеках, но технически я в этом проблем не вижу: в каталоге /proc имеется некоторая дополнительная инфа о работающем процессе, из которой в совокупности с данными динамического загрузчика что-то и как-то можно расковырять. 3. Когда gdb поднимает файл core, то информацию взять уже неоткуда. Файл core содержит лишь образ памяти, занимаемый отлаживаемым процессом. А вся (или частично) информация про динамические библиотки берётся извне по отношению к отлаживаемому процессу: в пункте 1 это делается непосредственно через специальный hook (реализованый в ld.so именно для работы отладчика), в пункте 2 это делается на основании информации из /proc плюс какие-то специальные данные в ld.so (тоже сделанные для работы отладчика), но данные в /proc имеются только в том случае, если процесс жив. Когда процесса уже нет в живых, то эти данные уже утеряны. В итоге в core содержится только образ памяти, в котором нет информации о том, где какая динамическая библиотека. Информация же о самом бинарнике берётся из файла бинарника (т.к. core исследуется не самостоятельно, а в контексте бинарника, который параллельно с core'ой подаётся в отладчик)
3
|
|||||||||||
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
||
| 01.01.2012, 14:37 [ТС] | ||
|
Идея в том, чтобы помимо распечатки стека бектрейсом еще и автоматически создавать core dump, который дальше можно было бы при необходимости использовать для более детального анализа. (В обсуждении к вышеупомянутой теме я описывал возникшую у меня проблему, но тот пост остался не замечен) Поскольку там основная программа на время работы внешнего отладчика также приостанавливается системным вызовом wait, я тоже получаю неинформативный дамп.
0
|
||
|
|
||||||||||||
| 01.01.2012, 14:46 | ||||||||||||
|
Повторил с точностью до буквы твой вариант - увидел такую же засаду как и у тебя. Странно. Надо думать
Добавлено через 3 минуты Если в твоём коде заменить
Добавлено через 2 минуты
0
|
||||||||||||
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
| 01.01.2012, 14:52 [ТС] | |
|
0
|
|
|
|
||||||||||||
| 01.01.2012, 16:44 | ||||||||||||
Добавлено через 8 минут Этот же пример на sparc-linux отрабатывает корректно:
Добавлено через 3 минуты Есть некое предположение того, что gdb в случае i386 скинул образ памяти не основного процесса, а того, что получился после fork'а (т.е. ошибка gdb). Но как экспериментально подтвердить или опровергнуть - не знаю Добавлено через 13 минут В случае с i386 пока нашёл лекарство-затычку. Если линковать статически, то после поднятия core стек рисуется нормальный
1
|
||||||||||||
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
| 22.01.2012, 18:56 [ТС] | |
|
проблема чудесным образом разрешилась при апгрейде компилятора (gcc) с версии 4.4.3 до версии 4.6.2
0
|
|
|
|
|
| 02.10.2012, 15:14 | |
|
Для истории: https://www.cyberforum.ru/faq/... ost3506089
Т.е. проблема скорее всего была в том, что динамическая glibc собрана с дополнительной опцией -fomit-frame-pointer (или что-то типа того), а потому становится невозможна полноценная работа размотки стека. А статическая библиотека собрана без этой опции
0
|
|
| 02.10.2012, 15:14 | |
|
Помогаю со студенческими работами здесь
9
Проблемы с созданием RAID-5
Проблемы с созданием словаря на C++ Проблемы с созданием сервиса Проблемы с созданием процедуры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|