2016-11-17 12 views
0

Я работаю над многопоточным приложением, которое обычно отлично работает.Как обрабатывать исключение C++ 3765269347

Теперь, кажется, что subthreads разбивают, и путем настройки Visual Studio, чтобы бросить исключения C++, я обнаружил следующую информацию об исключении:

ExceptionCode : 3765269347 
ExceptionFlags : 1 
ExceptionRecord : <NULL> 
ExceptionAddress : 0x0000...0 
NumberOfParameters : 4 
params: 
    magicNumber : 429065504 
    pExceptionObject : 0x... (some memory address) 
    pThrowInfo : 0x... (some memory address) {<application.exe>[email protected]@ ... 
    attributes : 0 
    pmfnUnwind : 470560 
    pForwardCompat : 0 
    pCatchableTypeArray : 6451800 
    pThrowImageBase : 0x... (some memory address) {<application.exe>_IMAGE_DOS_HEADER_ImageBase} 

(я пытался скопировать в насколько это возможно, не стреляйте в меня в случае опечаток)

Я искал в Интернете для упомянутого кода исключения, но я не понимаю объяснения, и я искал упомянутое «AVC_IoException», но я ничего не нашел. Кто-нибудь знает, что я могу здесь сделать?

Для вашей информации исключение возникает, когда я пытаюсь что-то записать в буфер (для вашей информации этот буфер не является NULL), похоже, это не связано с загрузкой любых DLL-файлов (я поставить точки останова при каждой функции loadlibrary(), но ни одна из них не была вызвана).

Настоящим кусок кода (это рекурсивная функция, записывая что-то в буфер):

virtual void fillBuffersBeforeWrite(const <internal_struct>* pDsp, size_t nByteCount) 
    { 
    <internal_class>* w = writer(); 
    if (w && (w != this)) { 
     w->fillBuffersBeforeWrite(pDsp, nByteCount); 
    } 
    } 

Заранее спасибо

+1

Связанные вопросы об этом же исключении: http://stackoverflow.com/search?q=3765269347 –

+0

Вы пробовали * работать * в отладчике, чтобы фактически поймать исключение/сбой в действии? Где в вашем коде это происходит? Что ты здесь делаешь? Может быть, это состояние гонки, которое вы пропустили? Есть тысячи возможностей, и мы не можем их перечислить. Вы должны помочь нам, сужая список вниз. –

+0

Возможное объяснение того, что функция 'dllmain()' в DLL умерла из-за того, что выбрано исключение. http://stackoverflow.com/questions/17069336/c-loadlibrary-error-3765269347 Если это так, вам нужно будет посмотреть, что DLL загружается вашей программой и что заставляет их терпеть неудачу. – Peter

ответ

1

Попробуйте поймать код, который бросает исключение: в MS Visual Studio 2015, Отладка -> Windows -> Настройки исключения, выберите «Исключения C++», щелкните правой кнопкой мыши «Добавить исключение», вставьте тип исключения - «AVC_IoException»; отметьте также другие общие типы исключений - std :: exception, CException и т. д. Отладчик остановится в очереди, где выбрано исключение. Вы можете проанализировать стек. Имейте в виду, что вам, возможно, может понадобиться пропустить (т. Е. Попросить отладчика продолжить) нерелевантные исключения. Также неплохо сохранить отладочные сборки всех трех сторон, включая время выполнения C++/C и ОС.

+0

Спасибо за ответ, я попытаюсь использовать его, когда проблема возникнет снова: между тем один из инженеров поддержки нашел способ обход этой проблемы, сильно уменьшая приоритет. – Dominique

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