Обнаружить незащищенный код с помощью cppdepend для проверки отсутствия внешнего защитного устройства в цепочке вызовов? - PullRequest
3 голосов
/ 24 марта 2011

Я пытаюсь обнаружить код, который не защищен пунктом защиты на более высоком уровне в вызывающих.Я думаю, что могу довольно близко подойти к cppdepend , но не уверен, смогу ли я точно определить проблемы.

У меня есть куча кода, где требуется защита блокировки, поэтому у нас есть утверждение внутриfunctions:

assert(eventQueue.IsCurrentEventGuarded());  

Обратите внимание, что eventQueue является статическим экземпляром типа EventQueue.

Я хочу обнаружить все места, где функции, содержащие это утверждение, вызываются и есть не экземпляр объекта охраны в некотором пункте в их цепочке вызывающих абонентов.

Итак, все в порядке, если в какой-то момент в цепочке вызывающих абонентов есть выражение:

GSEventGuard guard;

Однако, если вызов IsCurrentEventGuarded происходит без этого защитного экземпляра где-то над ним, у нас возникает проблема, которая должна быть обнаружена.

Я могунайдите верхний уровень Методы защиты , которые создают охрану (то есть: хороших, которых мы можем игнорировать) с предложением:

SELECT METHODS WHERE IsDirectlyUsing "GSEventGuard" AND 
   IsUsing "EventQueue.IsCurrentEventGuarded()"

В идеале я должен иметь возможность игнорировать все выше и нижеэти методы.

Более интересное предложение находит два набора методов - те, которые ниже Методы защиты (между охраной и тестом) и те, которые находятся в цепочках вызовов, которые мы хотим, без защиты.

SELECT METHODS WHERE
DepthOfIsUsing "EventQueue.IsCurrentEventGuarded()" > 1
AND !(IsUsing "GSEventGuard.try_lock()" OR IsUsing "GSEventGuard.lock()")
ORDER BY DepthOfIsUsing DESC

находит 65 методов, которые находятся либо в цепочке вызовов ниже блокировки, либо выше и без охраны

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