Почему я не вижу диалоговое окно «Ошибка приложения»? - PullRequest
0 голосов
/ 15 сентября 2010

Мне было интересно узнать больше о микшировании времени выполнения между exe и dll. На машине WinXP я создал сборку dll для среды выполнения релиза (/ MD) и исполняемый файл, который вызывает функцию в dll, которая является отладкой сборки (/ MDd). Функция в dll выделяет память для кучи, а exe удаляет ее. Я ожидал, что это вылетит, однако вместо этого зависает. Используя ProcessExplorer Я вижу, что состояние исполняемого файла "wait: userrequest". То же упражнение на компьютере с Vista показывает , чтобы показать диалог. Я тоже хочу видеть диалог на моем компьютере с XP!

Я попробовал противоположность всех предложений здесь . Я уже давно гуглил. Я поиграл с включением всех служб отчетов об ошибках, которые я мог найти в gpedit.msc, а также убедился, что служба отчетов об ошибках работает в диалоговом окне AdministrativeTools-> Services.

Чтобы быть точным, вот моя DLL:

int* getDllMem(){
     printf("dll alloc mem");
     int *ptr = new int;
     return ptr;
}

Вот мой exe:

int main()
{
     printf("main\n");
     int *ptr = getDllMem();
     printf("main delete\n");
     delete ptr;
     printf("main exit\n");
     return 0;
}

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Ваша программа перешла в неопределенное и ошибочное поведение. Зачем ожидать одинаковый результат в разных операционных системах?

Если во время выполнения на каждой из этих машин происходит что-то даже немного отличающееся, это может привести к тому, что один из них зависнет, а другой немедленно выйдет из строя.

Возможно, время выполнения, которое использует программа, немного отличается на этих машинах / операционных системах. Возможно, другие аспекты операционной системы оказывают влияние (например, рандомизация размещения адресного пространства ).

Я подозреваю, что только кто-то с очень глубоким знанием времени выполнения и менеджера кучи мог точно ответить, почему есть разница.

Честно говоря, моя внутренняя реакция на этот вопрос такова: вам не следует тратить слишком много времени на беспокойство о том, почему сбой программы различается в этих двух операционных системах, потому что вы никогда не должны писать такую ​​программу, как эта. *

0 голосов
/ 15 сентября 2010

XP и Vista имеют другую архитектуру системы и, возможно, другой код сборки. На какой машине вы компилировали программу? XP или перспектива?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...