Nano Hash - криптовалюты, майнинг, программирование

Найти исходную строку в общей библиотеке из трассировки стека

У меня есть долго работающая программа, в которой произошел (вероятно, периодический) сбой сегментации через 9 часов, и все, что у меня есть, это трассировка стека. Я хотел бы найти исходную строку, в которой произошла ошибка сегментации.

Segfault произошел в модуле C++ (использующем OpenMP), который был вызван из Python с использованием ctypes. Модуль C++ был скомпилирован с символами отладки в Linux. Сама программа Python работает под управлением OpenMPI, что еще больше усложняет отладку, и у меня нет дампа ядра.

Верхняя часть трассировки стека приведена ниже. Мне интересно узнать все, что я могу об исходной строке _ZN13BackbonePairs13compute_valueE11ComputeMode+0x5e1. Это явно моя функция BackbonePairs::compute_value, но в этой функции нет запуска потока, поэтому я не уверен насчет libpthread в трассировке стека.

[midway2-0015:35095] *** Process received signal ***
[midway2-0015:35095] Signal: Segmentation fault (11)
[midway2-0015:35095] Signal code: Invalid permissions (2)
[midway2-0015:35095] Failing at address: 0x7fd7633c6000
[midway2-0015:35095] [ 0] /lib64/libpthread.so.0(+0xf100)[0x7fdb86986100]
[midway2-0015:35095] [ 1] /home/jumper/upside/py/../obj/libupside.so(_ZN13BackbonePairs13compute_valueE11ComputeMode+0x5e1)[0x7fdb7328c571]
[midway2-0015:35095] [ 2] /home/jumper/upside/py/../obj/libupside.so(_ZN11DerivEngine7computeE11ComputeMode+0x4c9)[0x7fdb73277a59]
[midway2-0015:35095] [ 3] /home/jumper/upside/py/../obj/libupside.so(evaluate_energy+0x65)[0x7fdb73202ba5]
[midway2-0015:35095] [ 4] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(ffi_call_unix64+0x4c)[0x7fdb5280e15a]
[midway2-0015:35095] [ 5] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(ffi_call+0x153)[0x7fdb5280cd33]
[midway2-0015:35095] [ 6] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(_ctypes_callproc+0x277)[0x7fdb528042b7]
[midway2-0015:35095] [ 7] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(+0x9b52)[0x7fdb527fab52]
[midway2-0015:35095] [ 8] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/libpython2.7.so.1.0(PyObject_Call+0x43)[0x7fdb86be79a3]
[midway2-0015:35095] [ 9] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x55ed)[0x7fdb86c9df7d]

Ответы:


1

Когда вы загружаете библиотеку в gdb, команда

дизас / м

должен показывать дизассемблирование со смещениями, чередующимися со строками исходного кода (если эта информация доступна). cf: машинный код gdb.

Pthread в трассировке стека может появиться, если вы вызываете некоторый код MPI, встроенный компилятором (например, блокировку/разблокировку мьютекса).

27.03.2017
  • Спасибо за информацию. На случай, если кто-то еще наткнется на это, disas /m устарел в пользу disas /s, который лучше работает при наличии тяжелого встраивания. 27.03.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..