Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

Бессовестно "глючит" встроенный в Д7 дебагер )..   Найти похожие ветки 

 
Digitman ©   (2005-09-23 14:39) [0]

Ув. колееги !

Баг вроде бы известный, но я просто не уловил момента, с которого у меня он начал проявляться - то ли еще до установки мной Д7-апдейта, то ли уже после ... надо бы определиться ... если у кого-то имеется под рукой прямые ссылки на инф-цию об этом баге и багофиксе (в 1-ю очередь от самого Борланда), прошу привести их здесь ..

Суть бага проста : дебагер при выводе, например, в окно Evaluate/Modify содержимого AnsiString-переменной бессовестно искажает реальное содержимое строки, если ее длина > 4096 (оч интересная цифирь, не правда ли ?) ... и искажает имеенно те данные, которые начинаются за упомянутой границей ... попросту - выводит черт-те какую область памяти, но только не ту что реально занимает стр.данные за этой границей ..

В принципе о баге этом в Д7 (в Д5 с этим все было в порядке) я где-то когда-то уже слышал, но до поры до времени он мне никак не мешал ...

Хотелось бы побыстрей определиться со своими дальнейшими "телодвижениями" по возможному устранению сей неприятности..


 
vecna ©   (2005-09-23 15:36) [1]

я могу ошибаться, но этот баг есть и в 6 дельфях.
по крайнем мере, мне там (со всеми апдейтами и патчами) доводилось видеть неадекватную картину.


 
Digitman ©   (2005-09-23 15:46) [2]

за 6-ку ничего не скажу - я не пользовал ее...

хочешь сказать, что баг выполз еще в 6-ке и плавно переехал в 7-ку со всей ее известной апдейт-ботвой ?


 
vecna ©   (2005-09-23 16:39) [3]

Digitman ©  [2]
Я ничего не хочу сказать, я практически не работал в 7ке.
Но наблюдал описаный вами косяк в 6: длинная строка отображалась не корректно по ctrlF7. Понаблюдал и забил на него... т.к. мне он не мешал =) собственно вот и все, даже деталей не помню, так как было давно.


 
alpet ©   (2005-09-23 16:46) [4]

Может помочь такая конструкция: PChar (PDWORD (@ss)^  + 4096)?

пример кода:

var
   ss: String;
    n: DWORD;
begin
SetLength (ss, 8192);
ss := "";
for n := 0 to 4095 do
    ss := ss + "%";
ss := ss + "test text";
if ss = "exit" then exit; // здесь поставить бряк и смотреть watch
end;


 
alpet ©   (2005-09-23 16:53) [5]

Для модификации можно попробывать PChar (PDWORD (@ss)^), но в любом случае содержимое строки в соотв. EDIT окна Evalute/Modify непомещается.

Выдается вот что: Line too long (more than 1023 characters).


 
Digitman ©   (2005-09-23 17:05) [6]


> alpet ©   (23.09.05 16:46) [4]


нет, не пойдет...

еще раз : меня волнует возможность самого дебагера (безо всяких впомог. прогр. выкрутасов)  показать мне полное и правильное содержимое моей строки


> alpet ©   (23.09.05 16:53) [5]


хочешь сказать, что проблема каким-то невероятным образом кроется именно в системных ограничениях для окна класса EDIT (64кбайт инф-ции)

?

но ведь, если не ошибаюсь, эти ограничения для НТ-based-систем сняты ?


 
alpet ©   (2005-09-23 17:38) [7]

Digitman ©   (23.09.05 17:05) [6]

Ограничения в килобайт (-1) устроены программистами Borland, полагавшими что никому в Turbo Pascal (а может в Turbo Debugger) не придет в голову создавать слишком большие строки. От этого и все проблемы.

Для отладки так-что придется юзать либо дамп в окне CPU, либо по частям модифицировать (для этого можно специальный вспомогательный класс сделать).


 
Digitman ©   (2005-09-23 18:08) [8]


> alpet ©   (23.09.05 17:38) [7]


> так-что придется юзать либо дамп в окне CPU, либо по частям
> модифицировать


уверенность твоя в отсутствии нативного решения 100%-я ?


 
alpet ©   (2005-09-23 18:21) [9]

Digitman ©   (23.09.05 18:08) [8]

Не уверен, что Borland сильно развивает встроенный отладчик. Так что если патча нет, решения нет тоже.

Вот кстати как методом "хака" можно использовать отладчик Delphi:

type
 HackStr = object
 protected
  function  GetHack (const s: string; offst: DWORD): PChar;
  procedure SetHack (const dst: string; offst: DWORD; const src: PChar);
 public
  temp: PCHAR;
  property  hack [const s: string; offst: DWORD]: PChar read GetHack write SetHack;
 end;

procedure HackStr.SetHack;
var px: PChar;
begin
px := @PChar (dst) [offst];
StrCopy (px, src);
end;

function HackStr.GetHack(const s: string; offst: DWORD): PChar;
begin
result := @PChar (s) [offst];
end;


Переменная класса HackStr объявляется где-нибудь среди глобальных переменных. Для обхода оптимизатора Delphi, вставляется след. код:

var s: string;
    hs: HackStr;
begin
s := "1";
if ( hs.hack [s, 0]  = "1") then hs.hack [s, 0] := "2";
end;


В окне Evalute|Modify соответственно глобальная переменная используется вместе с той которую нужно модифицировать (например g_hs.hack [somestr, 4096]).

Но все это имхо подход слишком уж извратный, лучше какой-нибудь другой метод подыскать.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
14-1127550430
WinXP
2005-09-24 12:27
2005.10.16
WinXp и рабочая группа


11-1108260935
Lars
2005-02-13 05:15
2005.10.16
Current Listbox Selection


6-1119465288
bugman
2005-06-22 22:34
2005.10.16
UDP Redirect, port mapping, TidMappedPortUDP


2-1126848784
Lady
2005-09-16 09:33
2005.10.16
Запрос


1-1127885181
C00ler
2005-09-28 09:26
2005.10.16
Вывод текста разными стилями из потока





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский