инструменты статического анализа кода для выявления проблем с переносимостью в 64 бита? - PullRequest
3 голосов
/ 19 сентября 2011

Я ищу лучший способ конвертировать большие объемы кода в 64 бит.Мне было предложено изучить некоторые инструменты статического анализа кода, такие как cpptest, чтобы определить проблемы переносимости.Кто-нибудь есть какие-либо предложения для меня, что я мог бы использовать?Или эффективный способ переноса кода в 64-битную среду?

: windows, vs2008 (я знаю о параметре «Определять проблемы с 64-битной переносимостью» в VS, но мне нужно лучше).* пример: инструмент, который подхватит этот очевидный тип ошибок в 64-битной переносимости.

for (int i = 0; i < 64; i++)
{
    __int64 n64 = (1 << i); // Does not generate warning
}

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

Попробуйте PVS-Studio: http://pvs -studio.viva64.com / , она предоставляет специальный набор правил для выявления проблем с переносимостью 64-битных

1 голос
/ 19 сентября 2011

Frama-C - это расширяемая среда анализа для C (только) с плагином для обнаружения неопределенного поведения.

Давайте попробуем это на вашем примере:

main(){
  for (int i = 0; i < 64; i++)
  {
    long long n64 = (1 << i);
  }
}

Этот плагин изначально не предназначен для случайного поиска ошибок, поэтому вам придется извинить плохой интерфейс и довольно строгие условия использования:

$ frama-c -val t.c
...
t.c:4:[kernel] warning: invalid shift: assert i ≥ 0 ∧ i < 32;

Условие i ≥ 0 ∧ i < 32 выражает условие, которое должно быть истинным в строке 4 для определения сдвига. Как вы можете сделать вывод, как только проблема была указана вам, 1 имеет тип int, и для этой архитектуры не определено смещение его более чем на 32.

Это предупреждение вы хотели увидеть?

Опять же, Frama-C предназначена только для C, поэтому вы можете воспользоваться ею только в том случае, если части проекта, которые вы хотите исследовать, находятся в C.

...