Как получить реестр ПК для любого потока в Linux? - PullRequest
0 голосов
/ 01 ноября 2010

Мой поток отладки будет контролировать использование памяти. Когда он находит ситуацию несоответствия, он генерирует coredump.

Как я обнаружил, coredump не очень точен (выглядит немного позже, чем в момент возникновения проблемы, потому что мне нужно сделать некоторую очистку в потоке отладки до abort()).

Я хочу записать точный %pc регистр потока val в то время, как я могу это сделать?

1 Ответ

1 голос
/ 01 ноября 2010

Один из способов получить 'недавний' %pc - программный счетчик - (также известный как %ip указатель инструкций ) - сохранить состояние вашего процесса.с makecontext

void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);

и считайте правильное значение в буфере: REG_EIP, как определено в sys/ucontext.h

context.uc_mcontext.gregs[REG_EIP];

Обратите внимание, чтоструктура данных, очевидно, зависит от машины, и, например, если бы вы использовали SPARC, %ip был бы сохранен в REG_RIP

-

, насколько я знаюнет способа прочитать это значение для всех потоков, вам нужно будет прочитать %pc в каждом из них и вручную собрать ваши данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...