C ++ поиск ошибок указателя - PullRequest
1 голос
/ 07 июня 2010

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

Программа написана на родном C ++ с использованием COM и использует COM-серверы вне процесса.

Кто-нибудь может дать мне несколько советов, как найти эти ошибки?

Есть ли какие-то конкретные вещи, которые нужно иметь в виду, способы сделать это и т. Д ...

Ответы [ 4 ]

1 голос
/ 30 января 2011

BoundsChecker имеет режим выполнения, называемый ожиданием процесса. Это позволяет включить BC в режим ожидания, пока ваш процесс DLLHOST не запустится, и подключить ядро ​​BC при запуске процесса. Для ошибок указателя вы должны использовать режим окончательной проверки BC. Это означает, что вы добавляете встроенные инструменты времени компиляции, которые могут быть раздражающе медленными, если вы обрабатываете все свое приложение, но могут быть чрезвычайно эффективными, если вы используете только свой COM-сервер и его зависимости. Посмотрите http://www.microfocus.com в MF Developer, чтобы узнать новости о запуске DPS 10.5 в начале февраля. Отказ от ответственности, я работаю в команде DevPartner, так что считайте это моей бесстыдной заглушкой. Наша цель с выпуском 10.5 и его 64-битной поддержкой состояла в том, чтобы гарантировать, что мы сможем обрабатывать в первую очередь чистые приложения C ++ x64, вторые смешанные приложения .NET и чистые приложения .NET, работающие до BC. Другие профилировщики в наборе пошли другим путем, с чистым .NET в первую очередь. Надеюсь, вы найдете 10.5 подходящим для вашей среды разработки и устранения неполадок.

1 голос
/ 07 июня 2010

Вы можете попробовать использовать профилировщик памяти, например AQTime, DevPartner или IBM Rational Purify. Я думаю, что есть много других.

1 голос
/ 07 июня 2010

У меня есть несколько предложений здесь:

  1. Как вы узнали, что произошла ошибка указателя? Почему бы вам не положить его в отладчик, а затем посмотреть, где происходит сбой программы? Это было бы началом. Положите часы на переменную (ые) переменную (и).
  2. Что заставляет вас думать, что что-то не так в COM-части кода? Напротив, я предполагаю, что здесь запущены 2 процесса (могут или не могут быть на одной машине), и вы должны запустить их параллельно, а затем посмотреть, как они реагируют друг на друга - я в основном уверен, что что-то не так в обработка данных в коде приложения. COM является довольно зрелой технологией.
  3. Возможно, вы делаете неправильные вызовы API или, как это обычно бывает со всеми вещами Microsoft, существует 1000 аргументов, возможно, вам нужно настроить их там.

Надеюсь, это поможет. Вы также можете попробовать что-то вроде удаленной отладки и всего остального, или обработать код с помощью Vtune или чего-то еще, но для начала все будет проще.

Arpan

0 голосов
/ 07 июня 2010

Это очень широкий предмет.

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

Вы также можете подключить пользовательский код выделения и освобождения (например, посмотрите на debug_new (думаю, в Microsoft).

Для COM-специфичного отслеживания я не уверен, есть ли уже готовые решения. Если вы используете ATL, вы можете подключить / заменить / расширить классы интеллектуальных указателей (например, CComPtr) своими собственными.

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