2016-03-04 2 views
0

Я пытаюсь проверить процесс, который «висел» на моем сервере. Я использую GDB для attatch к процессу, как так:GDB, связанный с PID - не удается получить адрес памяти

gdb -p PID 

Хотя отладчиком я бегу bt и получить следующее:

(gdb) bt 
#0 0x00007f57f4be73ba in __getpwuid_r (uid=4113672712, resbuf=0x7f57f531ce40, buffer=0x1 <error: Cannot access memory at address 0x1>, buflen=0, 
    result=0x7f57f531a048) at ../nss/getXXbyYY_r.c:198 
#1 0x00007f5700000004 in ??() 
#2 0x0000000000000060 in ??() 
#3 0x0000000000000001 in ??() 
#4 0x00007f5700000031 in ??() 
#5 0x0000000000000000 in ??() 

Является Cannot Access Memory Address потенциальной причиной для чего этот процесс, чтобы повесить? Или это означает, что программное обеспечение прекратило работу, но все еще работает?

Это скрипт CasperJS.

+0

Похоже, вы присоединяетесь к производственной версии приложения. Вероятно, у них есть оптимизация и отключение отлаженных символов. Поэтому вы не можете полностью полагаться на то, что говорит gdb. Например, если оптимизация включена, некоторые значения переменных будут недоступны для gdb в любой момент времени. Поэтому мой совет заключается в том, чтобы сохранить вышеуказанную информацию в виде точек данных. Но не делайте твердых выводов только по этим вопросам. К сожалению, вам нужно будет отлаживать дальше. – kaylum

ответ

0

Не удается ли получить доступ к адресу памяти потенциальной причиной зависания этого процесса?

No.

Вполне вероятно, что весь ваш стек является поддельным, и ваш процесс не внутри __getpwuid_r вообще.

Возможно, это может произойти, если вы обновили системные библиотеки, но не перезапустили процесс. Затем GDB просматривает установленные на данный момент системные библиотеки, которые не соответствуют копии, фактически используемой процессом.

Вы можете подтвердить это опровержение, просмотрев «(удаленные)» записи в /proc/$PID/maps.

Если это действительно так, вам нужно будет организовать GDB, чтобы увидеть старые версии системных библиотек (те, которые были текущими при запуске процесса), прежде чем вы сможете получить правильную трассировку стека. This answer может помочь с настройкой.

Смежные вопросы