__asm int 3;

Тема в разделе "LANGS.C", создана пользователем osox, 26 мар 2011.

  1. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    Всем привет.
    есть макрос если под отладчиком запустить и сработает бряк
    то статус последней ошибки сохраняется
    если без отладчика то в запустившемся отладчике
    значение последней ошибки всегда 0 почему так ?
    Код (Text):
    1. #ifdef _DEBUG
    2. #define BREAKMACRO() __asm {int 3}
    3. #else
    4. #define BREAKMACRO() do {} while (0)
    5. #endif
    6.  
    7. #define return_val_if_fail(expr,val) \
    8.     do{ \
    9.         if (!(expr)){ \
    10.             DWORD dwLastErr = GetLastError(); \
    11.             AllocConsole(); \
    12.             freopen("CONOUT$", "wt", stderr); \
    13.             fprintf(stderr, "%s %d\n", __FUNCTION__, __LINE__); \
    14.             SetLastError(dwLastErr); \
    15.             BREAKMACRO(); \
    16.             return val; \
    17.         } \
    18.     }while (0)
    19.  
    20. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, INT)
    21. {
    22.     BOOL IsSuccessCall = SomeApiCall...
    23.     return_val_if_fail(IsSuccessCall, 0xdeadc0de);
    24.     return 0;
    25. }
     
  2. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Если без отладчика прога закроется просто, от не обработаного исключения
     
  3. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    нет у меня AеDebug настроен на запуск Olly Debugger
    дело в том что когда она запускается LastError равен 0
    хотя инструкцией выше идет вызов SetLastError но после прерывания
    его значение меняется на 0 почему то а вот если прогу прогонять
    сразу под отладчиком то когда брякаемся все хорошо сохраняется
     
  4. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    osox
    Не проще ли юзать VEH \ SEH для этих целей ?
     
  5. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    c4m310t
    хмм или я вас не понимаю или вы не понимаете зачем мне это надо
    сех оно для чего ? мне надо коды возврата после каждой
    функции проверять писать в дебуг оутпут и возвращать
    код ошибки а в дебаг версии еще и в отладчик вываливатся
    чтоб видеть что не одна функция не дала сбой и потихому
    операция не откатилась или приведите пример как сех поможет в этом
     
  6. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    osox
    зачем в отладчик вываливаться то ?
    установите СЕХ и все, если что то упадет - получите управление в СЕХ обработчике своем...
     
  7. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    c4m310t
    можно пример ? кусочек кода с такой обработкой ошибок
    а то мне кажется мы разного хотим вот например
    как мы окажемся в обработчике если функция вернула
    код ошибки никакого исключения небыло сгенерено
    а нам надо залогировать это дело и в коде чтоб
    как нибудь покороче было