| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Контроль памяти и image file |
| Автор: CPlusPlusFAN 22.3.2008, 19:34 | ||||||||
| Нет. Я не ошибся разделом. Это действитьльно по C++. Я запускаю jar файл с контролем памяти:
Здесь я привёл не весь код, только отдельные участки. Когда запускается приложение не на Java, всё работает. Как только запускаются jar файлы, происходит следующее: первое скомпилированное приложение работает нормально начиная со второго приложение отказывается запускаться Проблему решает код:
Это срабатывает, если убрать строки:
Однако это меня не устраивает (контроль памяти нужен). Если вышеприведённый код присутствует, то при обработке кода:
возникает ошибка External exception C0000008. http://ipicture.ru/ Т.е. чтобы работала прога, нужно удаление image файла. Чтобы можно было удалить image файл, нужно убрать контроль памяти. Если убрать контроль памяти, прога не будет работать. Как мне быть? |
| Автор: korian 22.3.2008, 20:55 |
| я сам хз, скажу некоторые соображения, которые появились при прочтения MSDN я так понимаю de.u.CreateProcessInfo.hFile надо сохранять куда-нить в момент сообщения CREATE_PROCESS_DEBUG_EVENT. потом оно может быть не действительно. и закрывать поидее надо до последнего ContinueDebugEvent() |
| Автор: dumb 23.3.2008, 22:53 |
| перед тем, как использовать de.u в качестве CREATE_PROCESS_DEBUG_INFO, надо бы удостовериться, что de.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT. |
| Автор: CPlusPlusFAN 24.3.2008, 13:14 | ||
Уважаемый dumb, можно немного поподробней, а то я после PHP тяжело въезжаю. |
| Автор: dumb 25.3.2008, 13:18 | ||
примерно так:
|
| Автор: CPlusPlusFAN 29.3.2008, 19:45 | ||
dumb, изменил, как ты сказал: снова External exception C0000008.
Если убрать de.u.CreateProcessInfo.hFile=NULL; такая же лажа. |
| Автор: dumb 29.3.2008, 22:57 |
| нет, тут суть не в самой проверке, а в том, что это действие должно производиться тогда, когда de.dwDebugEventCode равен именно CREATE_PROCESS_DEBUG_EVENT. |
| Автор: CPlusPlusFAN 31.3.2008, 15:04 | ||
Вот полный код.
Первый исходник компилится (с флагом exception==false) и работает на всех тестах. А второй компилится, но не запускается. |
| Автор: dumb 1.4.2008, 01:32 |
| так как воспроизвести твои условия не представляется возможным, то тут только одна рекомендация: осваивай отладчик билдеровский. код вроде выглядит вполне рабочим, с небольшими огрехами: не проверяется результат CreateProcess, упрощенная схема пропуска первого системного брекпоинта(там, где флаг first) предполагает отладку только одного процесса(т.е. flag|=DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS;) и перед WaitForDebugEvent неплохо бы сделать status=DBG_CONTINUE. |
| Автор: CPlusPlusFAN 8.4.2008, 16:37 | ||||||||||||
| В общем такие дела: Программы на Java работают, но иногда. Например код:
работает и не вызывает проблем. А вот код:
выдаёт ошибку, описанную выше. Т.е. при чтении/записи что-то происходит. Трассировка показала, что на строке:
, когда она выполняется второй раз, переменная:
принимает какое-то левое значение, а переменная:
становится равной NULL. Что происходит? ЗЫ Если не выполнять:
, то эти проблемы отпадают. |
| Автор: dumb 9.4.2008, 01:24 |
| прочитай, пожалуйста, что-нибудь(http://users.msu.dubna.ru/~ovg/c++course/p1-7.html) про union(объединение). еще раз повторю: переменные de.u.CreateProcessInfo.* имеют смысл только в тот момент, когда de.dwDebugEventCode равен CREATE_PROCESS_DEBUG_EVENT. hint: если выложишь тестовый проект + java-прогу(на которой выходит ошибка), может кто-нибудь поможет. я наверное не смогу, т.к. сижу на чумоданах... |