D. Infuehr Ответов: 1

Как получить обратный вызов доступа к полю внутри структуры C?


Предположим, у нас есть структура:

struct Foo
{
    void(*Print)(); //could be any method pointer
    int MyField;
}


Мы можем установить Foo - & gt;Print для любой функции, например:
Foo- & gt;Print = тест;

void Test()
{
   printf("print called");
}

void Callback()
{
   //this should be called for every memory access at Foo->Print
}


Как реализовать обратный вызов доступа к памяти, чтобы каждый раз, когда вызывается Foo- & gt;Print, также вызывался обратный вызов?
Профилировщики и отладчики памяти могут делать именно это, поэтому это должно быть возможно.
Было бы неплохо, если бы это также работало для простых полей, таких как MyField для чтения и записи.

Что я уже пробовал:

Я не знаю, с чего начать ... -

1 Ответов

Рейтинг:
0

nv3

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

Один из способов реализации этого - ввести второй указатель функции; назовем его PrintWrapper. Внешний мир должен вызывать только PrintWrapper. И в этой функции вы вызываете Print и вызываете Callback (или выполняете все эти задачи обратного вызова непосредственно в PrintWrapper). Это независимый от платформы способ сделать это и очень простой.