Нахождение C ++ статических проблем порядка инициализации - PullRequest
55 голосов
/ 02 декабря 2008

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

Edit: я получаю несколько хороших ответов о том, как решить проблему статического порядка инициализации, но это не совсем мой вопрос. Я хотел бы знать, как найти объекты, которые подвержены этой проблеме. Ответ Эвана кажется лучшим в этом отношении; Я не думаю, что мы можем использовать valgrind, но у нас могут быть инструменты анализа памяти, которые могут выполнять аналогичную функцию. Это может вызвать проблемы только в том случае, если порядок инициализации является неправильным для данной сборки, и порядок может меняться с каждой сборкой. Возможно, есть инструмент статического анализа, который бы это уловил. Наша платформа - это компилятор IBM XLC / C ++, работающий в AIX.

Ответы [ 11 ]

0 голосов
/ 22 июля 2010

Если ваш проект находится в Visual Studio (я пробовал это с VC ++ Express 2005 и Visual Studio 2008 Pro):

  1. Открыть представление класса (Главное меню-> Вид-> Представление класса)
  2. Разверните каждый проект в своем решении и нажмите «Глобальные функции и переменные»

Это должно дать вам приличный список всех глобалов, на которые распространяется фиаско .

В конце концов, лучший подход - попытаться удалить эти объекты из вашего проекта (иногда легче сказать, чем сделать).

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