2010-11-30 4 views
1

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

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

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

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

+1

Сообщение об ошибке должно указывать исходный файл и номер строки, с которой он связан ... – 2010-11-30 22:04:13

+0

@ Oli: Я думаю, что это происходит из CRT и не имеет информации о файле/строке. – 2010-11-30 22:11:53

+0

Я не понимаю. Разве компилятор не дает файл и строку всех ошибок компиляции? – Puppy 2010-11-30 22:17:40

ответ

0

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

0

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

EDIT: Если вы можете скомпилировать программу на Linux, вы можете просто установить и запустить memgrick valgrind. Он должен распечатать все ошибки с номером строки.

0

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

EDIT: Если вы могли бы скомпилировать в Linux/g ++, в этом случае он оставил бы ядро ​​с обратным каналом.

0

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

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

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