Я использую PIN-инструмент, чтобы отслеживать, сколько памяти читает и записывает во время выполнения SQL-запроса. Однако произошло нечто странное. Адреса памяти в pinatrace.out для чтения / записи, полученные при запуске
./pin -t pinatrace.so -- /usr/local/pgsql/bin/psql postgres < tmp.sql
... не будет совпадать с адресами памяти, которые я напечатал из postgresql.
Я добавил несколько строк в исходный код postgresql для распечатки адресов некоторых фиктивных указателей. Он распечатал адреса памяти в журнале, как я и ожидал, но адреса не могут быть найдены в «pinatrace.out», который содержит все адреса памяти, к которым был получен доступ при подключении pin к psql.
Однако, когда я копирую те же строки печатных адресов фиктивных указателей в простой файл test.c и запускаю
./pin -t pinatrace.so -- ./test
... адреса из вывода на экран можно найти в pinatrace.out.
Оба теста были запущены postgres, так как я меняю владельца PIN на postgres.
Я действительно озадачен. Может ли кто-то быть достаточно добрым, чтобы указать, что происходит? Postgres выделяет память по-другому, или я могу неправильно запустить pin-код? Любые мысли помогут!
Пожалуйста, дайте мне знать, если вы хотите, чтобы я уточнил вопрос дальше.