Предположим, у меня есть определение класса, подобное этому:
class A {
private:
Field f;
public:
/*A hundred methods all of which modify f*/
m1();
m2();
...
m100();
}
Мы знаем заранее, что все эти методы, если они будут вызваны, изменят f.
Предположим, у вас очень кодовая база для спагетти.
Вам нужно найти во время выполнения, если и где f действительно изменено.
Вы можете использовать gdb, установить точку останова для каждого метода и посмотреть, где остановится выполнение, а затем развернуть стек, чтобы увидеть, какой метод вызвал любой из методов m * (). Это очень медленно, подвержено человеческим ошибкам и не обязательно возможно в базе кода, использующей emscripten, или когда python вызывает двоичный файл C ++ после установки некоторого состояния ...
Вы можете закомментировать все такие методы и исследовать все места в коде, где жалуется компилятор. Это намного хуже, чем предыдущий, и он делает это во время выполнения, поэтому сложнее определить, какой метод будет В действительности вызываться.
Как и выше, вы можете пометить все вышеперечисленные методы как устаревшие, но у него более или менее одинаковые проблемы.
Есть ли у кого-нибудь предложения по определению того, когда и где поле действительно изменяется?