Почему процесс умирает "по тихому"??

Тема в разделе "WASM.WIN32", создана пользователем liss, 10 сен 2004.

  1. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    Приветствую Всех!

    Я пишу программу, которая в нескольких потоках делает весьма объемные вычисления (неважно какие, важно то, что они занимают достаточно много времени и памяти). При запуске, этак потоков 100. Програма почему-то тихо и бесшумно сдыхает. Выражается это тем, что после вызова WaitForMultitpleObjects, fprintf(stderr, "done") ничего не пишет на экран. А %errorlevel% после смерти равен == 0xC0000027 или 0xC0000029, что означает STATUS_UNWIND и STATUS_INVALID_UNWIND_TARGET соответственно.



    Вопрос: почему происходит "бесшумный" выход? Насколько я понимаю, это коды эксепшенов, но никиких месадж боксов с Abnormal Termination и подобными не вылазят!



    Очень нужно знать, помогите кто сможет... Заранее большое спасибо!!
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Исключение возникает внутри обработчика исключения при раскрутке стека в функции RtlUnwind. Скорее всего, ты не правильно используешь SEH.
     
  3. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    А насколько SEH можно неправильно использовать, чтобы он делал "безвозмездный выход"? Приведи, пожалуйста, пример или просто объясни. :)
     
  4. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
  5. liss

    liss New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    25
    Во-во!!!

    Вот примерно эта же ситуация, запускаю допустим с cmd.exe мою прогу, ставлю: bpx ExitProcess в айсе, и получаю примерно такой стек:



    kernel32!ExitProcess

    msvcrt!.exit

    cmd!.text+0x111



    Откуда видно, что ExitProcess'ом от моей проги и не пахнет! Только почему-то %errorlevel% от твоей программы теперь равен 0xC0000005, i.e. STATUS_ACCESS_VIOLATION, а что может быть у меня????????