2010-06-07 4 views
1

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

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

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

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

+0

Какие «ошибки указателя»? – jalf

ответ

1

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

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

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

Арпан

0

Это очень обширная тема.

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

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

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

1

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

1

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 подходящих для вашей среды разработчиков и устранения неполадок.

Смежные вопросы