Ошибка отладки в STL - PullRequest
       30

Ошибка отладки в STL

1 голос
/ 01 декабря 2010

У меня есть одна большая проблема с использованием STL, C ++ и Visual Studio. Когда я использую некоторые функции std или stl (в отладочной компиляции), у меня появляются некоторые ошибки, например "Incorrect format specifier".

но мой код слишком велик для "ручного поиска" этой ошибки. Может быть, кто-то знает, как получить помощь в поиске ошибки, например, __FILE__ & __LINE__ для assert? Поскольку код программы слишком велик.

Или try & catch моя последняя надежда? ...

с уважением, Алекс

Ответы [ 4 ]

0 голосов
/ 01 декабря 2010

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

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

0 голосов
/ 01 декабря 2010

Может быть, вы могли бы делать сообщения о состоянии на консоли, чтобы вы могли понять, где происходит ошибка.Вы можете искать в этой части более подробно с той же техникой.Делайте это так часто, как вам нужно.
После этого вы можете отлаживать свою программу и устанавливать точки останова в «проблемной области» и проходить через нее.

РЕДАКТИРОВАТЬ: Если вы можете скомпилировать программу на Linux, вы можете просто установить и запустить valgrind memcheck.Следует распечатать все ошибки с номером строки.

0 голосов
/ 01 декабря 2010

Вы говорите о try / catch, поэтому я предполагаю, что это исключение.Если вы запускаете свое приложение в отладчике, не нарушает ли оно вашу программу в тот момент, когда генерируется необработанное исключение?

РЕДАКТИРОВАТЬ: если вы можете поочередно компилировать в Linux / g ++, оно оставит ядрообратный след в этом случае.

0 голосов
/ 01 декабря 2010

Поскольку у вас есть исходный код для STL, я бы установил точку останова в точке, где находится строка «Неверный спецификатор формата».Сделайте grep (например, найдите в файлах) для этой строки, установите точку останова на каждой, запустите вашу программу и надейтесь на смерть.:)

...