gdb и чтоние файлов

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение Guest » 24.04.2006 17:11:14

Уважаемые господа!
У меня стоит RedHat9 и под ним lazarus 0.9.14.
Для отладки подключен gdb: GNU gdb Red Hat Linux (5.3post-0.20021129.18rh).
На первый взгляд все просто замечательно: пошагово программа выполняется, можно просматривать значения переменных - просто сказка!
НО! Если программе необходимо открыть файл для чтения...

function .....;
var fnm:textfile;
begin
assign(fnm,'name');
reset(fnm);
.........

...то выскакивает сл. сообщение: Project raised exception class 'RunError(2)'.
а затем 'Unknown Error' процесс отладки останавливается.
Может у кого-нить есть предположения, от чего и как это можно победить?
Guest
 

Сообщение SovNarKom » 24.04.2006 23:46:13

Может GDB тут не причём...
>reset(fnm);
Если файл не существует, то ошибка и выскакивает, имя точно верное?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Guest » 25.04.2006 12:11:10

Да. Имя точно верное, потому как скомпиленый проект нормально работает. На файлы не жалуется. :( Никто с таким не сталкивался?
Guest
 

Сообщение SovNarKom » 25.04.2006 16:41:59

Слушай, а попробуй по абсолютному пути обращаться... что будет?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Guest » 25.04.2006 20:19:30

Попробывал - не помогает. Менял reset на append - все то же :(
Даже не представляю в чем тут дело.
Guest
 

Сообщение SovNarKom » 26.04.2006 00:10:00

Ну у меня в общем под win32 такого нет... ещё можно попробовать слздать другой файл ReWrite-ом, и посмотреть, что будет... но ещё попробуй этот код

Код: Выделить всё
function .....;
var fnm:textfile;
begin
assign(fnm,'name');
{$I-}
 reset(fnm);
 .........
 close(fnm)
{$I+}
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Guest » 03.05.2006 16:28:54

SovNarKom писал(а):... попробуй этот код

Код: Выделить всё
function .....;
var fnm:textfile;
begin
assign(fnm,'name');
{$I-}
 reset(fnm);
 .........
 close(fnm)
{$I+}

Огромное спасибо!!! теперь не вылетает, по крайней мере там, где раньше. А что эти "{$I-}{$I+}" делают? Еще раз спасибо!!!
Guest
 

Сообщение SovNarKom » 03.05.2006 17:47:49

Они выключают и включают автоматический контроль ошибок ввода-вывода, после них хорошо бы вызвать IOResult и посмотреть что она вернёт.
0 - всё нормально, иначе это код ошибки.

Вообще говоря странно у тебя оно себя ведёт...м Может GDB уродует рабочую директорию... попробуй по абсолютному пути вызывать.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Guest » 03.05.2006 18:58:13

Что то я ваще запутался :)
У меня есть "главная" из которой вызываются все остатьные. Раньше не хотели работать те "остальные". Т.е. отладчик заходил в "главную" из нее вереходил в подфункции и там уже возникали проблемы с файлами. Теперь отладчик ругается сразу при входе в "главную" (сразу после первого begin), хотя непосредственно в ней работы с файлами нету. До вызываемых из нее функций, которые с файлами и работают, отладчик не доходит :(.
Посмотрел IOResult - вездк нули, т.е. вроде гуд.
Guest
 

Сообщение SovNarKom » 03.05.2006 20:04:33

Ну я ещё плохо телепатию учил... код покажешь, хоть в приват, я распостранять не буду.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Spike » 04.05.2006 17:03:32

Все разобрался. Бошльшое спасибо за помошь. Решил проблему влоб, т.е. по-тупому: оказалось, что достаточно повставлять {$I-} в некоторые вызываемые модули (благо, их было немного :)) и все заработало.
Еще раз спасибо!!!
Spike
незнакомец
 
Сообщения: 2
Зарегистрирован: 04.05.2006 11:08:59


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 110

Рейтинг@Mail.ru