· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Механизм получения инф-ции об ошибке

Посл.отвђт Сообщенiе


Дата: Июн 15, 2004 19:32:02

Здравствуйте все. Народ, подскажите, пожалуйста, какой-либо механизм получения информации о произошедшей ошибке. Ситуация такова:
.data ?
hFile dd ?
nSize dd ?
ArrPtr dd ?
.
.
LOCAL RetBuffer :DWORD
.
.
invoke CreateFile, fname, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0
invoke GetFileSize,hFile, 0
invoke ReadFile, hFile, ArrPtr, nSize, RetBuffer, 0
В hFile, nSize, ArrPtr полученные данные, считанный размер файла совпадает с действительным, отсюда вывод, что hFile получен верно, ArrPtr - указатель на зарезервированный кусок памяти под чтение данных из файла(в размере nSize байт), RetBuffer - указатель на буфер возврата количества считанных данных. Программа уходит в ReadFile и застревает там. Никаких сообщений об ошибках, типа MessageBox'ов от системы, вообще ничего. Тихо-мирно процесс прекращает своё существование. GetLastError или PrintError соответственно не помагают. Можно ли в таком случае как-то получить информацию о том, что там в ReadFile произошло? Буду благодарен за любую подсказку.


Дата: Июн 15, 2004 19:49:17

Попробуй отладить приложение в дебагере.


Дата: Июн 15, 2004 20:18:30

А виндовский Debeg.exe поможет?


Дата: Июн 15, 2004 20:20:20

Поможет дебаггер от VS, или WinDBG, или OllyDBG. Видишь, какой выбор!


Дата: Июн 15, 2004 21:40:21 · Поправил: PavPS

А может стоит хорошо подумать, где значение, а где ссылка

ReadFile (hFile, offset ArrPtr, nSize, addr RetBuffer, 0);

Ведь такие симптомы указывают на то, что обращение к запрещенной/несущ-й области памяти. -> ошибка может быть в этом.


Дата: Июн 15, 2004 21:50:31

А может стоит хорошо подумать, где значение, а где ссылка

:)))


Дата: Июн 15, 2004 22:56:37

volodya, PavPS: спасибо. Чтобы "хорошо подумать, где значение, а где ссылка", надо хотя бы иметь минимум того, ЧТО обдумывать, а с этим пока тяжко. Закачал masm неделю назад, и в каком-то из хелпов прочел: для работы необходим минимум базовых знаний. Увы :((( пока не имею... Потому такие наивные вопросы :) А если совсем хорошо подумать то придумал так:
invoke ReadFile, hFile, offset ArrPtr, ADDR nSize, ADDR RetBuffer, 0
Без ADDR в третьем параметре наезжаем на переменную fname, и в MessageBox (последующем) вместо имени файла видим его содержание, например текст всего oleaut32.inc.
Ещё раз спасибо.


Дата: Июн 15, 2004 23:25:21

BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);

DWORD nNumberOfBytesToRead т.е. никакого ADDR nSize, а чисто nSize. А уж если куда наезжаешь, то проверь как жиреет твой буфер и на чё ОН наезжает.

Хотя не стоит это дальше... А вообще обзаведись MSDN. 3/4 вопросов отпадет!


Дата: Июн 16, 2004 07:47:45

Можно получить код ошибки, перевести его в текст и показать пользователю. Для получения кода - GetLastError. Для текста - FormatMessage


Дата: Июн 16, 2004 15:13:18

Разобрался: буфер жирел как надо, вот только не там где надо, а в секции .data?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057