2014-02-05 3 views
0

Я управлял и обновлял конкретное приложение. Он старый, и я не являюсь оригинальным разработчиком. На протяжении многих лет он подвергался нескольким отладкам среди других небольших патчей.Ошибка отладки: исключение C++ в приложении C#?

Он работает стабильно в течение последних нескольких месяцев, но затем произошло исключение, которое кажется странным для меня. Так как это происходит только на сервере (это серверное приложение.) В режиме деблокирования.

Приложение написано на C#, управляется в Visual Studio 2012 Professional и выпущено, чтобы быть явно 32-разрядным .NET 3.5, поскольку сервер, к сожалению, работает под управлением Windows 2003. (Я пытался убедить их обновить, поэтому я может обновить приложение до .NET 4.5, но, увы.)

Так что я получаю сообщение отладки C++. См. Снимок экрана ниже. Это происходит в файле с именем vsprintf.c Я угадываю строку 91. Единственное сообщение, которое дает мне подсказку, это формат! = NULL.

Это меня смущает. Что может быть причиной этого? Какие шаги я могу предпринять для отладки в такой ситуации? Что такое "vsprintf.c"?

Exception

Edit: мне удалось найти что-то в EventViewer. Я продолжу исследовать это тем временем.

Eventviewer

С уважением,

меня.

+0

'vsprintf' - стандартная функция. Вам нужно проверить стек вызовов. – Simple

+0

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

+0

@ Простой, как он может это сделать с утверждением? С другой стороны, в то время как у DavideNgueyen, похоже, был некоторый прогресс, воспроизводящий проблему ... – Wolf

ответ

2

Это ошибка утверждения, то есть предположение, что функция, которую вы вызываете, не выполняется, в этом случае указатель не является нулевым. По внешнему виду, это строка формата. Вы используете строки формата напрямую? Если да, посмотрите там. Если нет, это, вероятно, проблема с утечкой памяти, за которой следует неправильная работа с памятью.

+0

Я исключил, что это утечка памяти, рассматривая графику использования памяти в VM Manager – Perfection

+0

[+1] для большой догадки! @DavideNguyen: тогда вы сможете воспроизвести это на вашей машине разработки - если вы производите достаточную нагрузку? – Wolf

+0

Это маловероятно, так как серверный компьютер имеет физическое более 16 ГБ оперативной памяти, виртуальная машина имеет 4 ГБ оперативной памяти. (Этого более чем достаточно.) Хотя, поскольку моя система разработки имеет эффективную 3 ГБ оперативной памяти, потому что она запускает Windows 7 32-бит.Мы используем старые драйверы ODBC для других приложений для связи с нашими источниками данных UNIMS с каменным возрастом. Странно то, что ошибка является однократной ошибкой, и до сих пор она не повторялась. У меня нет тестового примера, и ничего необычного не происходит в нашей параллельной тестовой среде. – Perfection

0

vsprintf звонки могут быть вызваны sprintf и другими производными, возможно, вы должны проверить все эти звонки. (Это также могут быть методы строковых классов, как я видел в VCL).

Если ошибка не вызвана одной из библиотек вы используете, то должно быть NULL (или 0) в параметре строки формата , которая в основном последним перед ... в прототипе.

Если вы знакомы с regular expressions, это может сильно помочь при поиске узоров.

+0

Я просматриваю код, но сомневаюсь, что найду что-нибудь, что поразит меня как странное. – Perfection

+0

@DavideNguyen Вы нашли прямые вызовы функций с 'sprintf' в своих именах? – Wolf

+0

Нет, полный поиск не показывал вызовы sprintf или vsprintf. – Perfection

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