Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.16;
Скачать: CL | DM;

Вниз

Отладка VCL удаленно   Найти похожие ветки 

 
Pit   (2013-02-06 11:03) [0]

Проблема - у одного клиента возникает стабильно EAccessViolation внутрях VCL, где-то внутри ADO, видимо.

Нужно разобраться конкретнее в проблеме - кто что посоветует? Можно собрать дебажную версию (выполнено в виде DLL для 1C) и прогнать у клиента.

Есть еврика, правда с ней проблема. Собрал DLL под евриков, все EAaccessViolation указал писать в лог (это по-умолчанию собственно), так вот прогнал - получил AV точно, а нигде лога еврики не видно, почему она ничего не вывела - непонятно.

Вот такая вот ситуация немного сумбурно описанная мной )


 
sniknik ©   (2013-02-06 11:26) [1]

> где-то внутри ADO
и не надейся...

> почему она ничего не вывела - непонятно.
может потому, что она ловит внутри кода, а ошибка "снаружи"? вне "защищаемого" ей кода, ну, например на взаимодействии 1С-а с твоей dll.


 
Pit   (2013-02-06 11:45) [2]

подожди, я говорю же - исключение поднимается где-то внутри VCL, причем тут "снаружи".

Конкретно - есть вызов:

try
 [DataSetExample].LoadFromFile(...)
except on E: Exception do
 Вывод в лог...


вот так вот я ловлю исключение и вижу его в логе. Но мне нужно подробнее разобраться где внутрях VCL оно возникает...


 
Ega23 ©   (2013-02-06 11:58) [3]


> Проблема - у одного клиента возникает стабильно EAccessViolation
> внутрях VCL

Ты клиенту ПО с Delphi поставляешь? Оригинально...


 
Pit   (2013-02-06 12:03) [4]


> Ты клиенту ПО с Delphi поставляешь?

откуда такой вывод?! Я фигею...

Товарищи, давайте по теме)


 
RWolf ©   (2013-02-06 12:07) [5]


> Можно собрать дебажную версию (выполнено в виде DLL для
> 1C) и прогнать у клиента.

а подключиться к ней через Remote Debugging можно?


 
Pit   (2013-02-06 12:08) [6]


> а подключиться к ней через Remote Debugging можно?

очень сложно осуществить. Там рабочий процесс, поэтому какой-никакой опыт поставить можно, но вот сидеть прыгать отладчиком - не получиться.


 
sniknik ©   (2013-02-06 12:18) [7]

> я говорю же - исключение поднимается где-то внутри VCL, причем тут "снаружи".
ты говоришь свои выводы без объяснений почему так решил, если бы твои выводы были 100% верными, настолько, что сказал значит так и есть. то не было бы последующих вопросов.

> Конкретно - есть вызов:
если ловится, в конкретном месте конкретным трай экцептом то не понятно в чем вообще проблема... оно найдено, осталось решить от чего. а для этого нужна инфа - код из этого трай экцепта и что точно говорит (там же даже инфа для поиска строки на которой вылетает в эксепте есть ... нафига вообще усложнять приплетать еврику и т.д.)


 
sniknik ©   (2013-02-06 12:22) [8]

>> Ты клиенту ПО с Delphi поставляешь?
> откуда такой вывод?! Я фигею...
VCL это код дельфи, если клиент видит, что ошибка именно в VCL... вывод очевиден.


 
alexdn ©   (2013-02-06 12:24) [9]

> Pit   (06.02.13 11:03)  
Т.е. он пишет только общую ошибку AaccessViolation такая то? Если ado, то конечно подключение/доступ. Как самый глупый способ пересобрать проект (если есть возможность) и расставить флажки (ну на этапы). Типа этап первый пройден, этап второй пройден ну и т.д.. Хотя конечно лучше теоретически найти ошибку.


 
sniknik ©   (2013-02-06 12:35) [10]

http://www.gunsmoker.ru/2009/05/access-violation.html


 
Inovet ©   (2013-02-06 12:41) [11]

А нельзя взять бэкап базы и промоделировать у себя?


 
Pit   (2013-02-06 12:45) [12]


> ты говоришь свои выводы без объяснений почему так решил

потому что я ловлю ошибку на вызове VCL кода. Приводил пример выше:

try
[DataSetExample].LoadFromFile(...)
except on E: Exception do
Вывод в лог...



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

я же вроде сразу написал несколько раз - это Access Violation. Текст типа такого:

Access violation at address 0F63BAE6 in module "MY_MOD~1.DLL". Read of address 00000008

Это Exception.Message
Собственно, какие-то вывода по данному сообщению сделать сложно, имхо.


> VCL это код дельфи, если клиент видит, что ошибка именно
> в VCL... вывод очевиден.

причем тут клиент. Это я вижу по логу


> http://www.gunsmoker.ru/2009/05/access-violation.html

не понимаю как это статья мне может помочь.

По-моему, не все внимательно прочитали заглавное сообщение темы.


 
Pit   (2013-02-06 12:47) [13]


> А нельзя взять бэкап базы и промоделировать у себя?

промоделировать нельзя, я же говорю. На моем компе ошибка не возникает.

Я показываю, что ошибка возникает на LoadFromFile у датасета. Даже если подсунуть тот же файл - на моем компе ошибки НЕ возникает.


 
Rouse_ ©   (2013-02-06 12:48) [14]

В логе выводи адрес исключения и hInstans библиотеки.
Вычтя из первого второе получишь оффсет в рамках своего модуля.
Загрузи библиотеку у себя, прибавь к новому инстансу полученный оффсет, поставь дам бряк, жди пока сработает - анализируй.


 
sniknik ©   (2013-02-06 12:51) [15]

> Это Exception.Message
тебе перевести? - Access violation at address 0F63BAE6 in module "MY_MOD~1.DLL". Read of address 00000008

если это вот именно та строка что показана, то у тебя DataSetExample не инициализирован.

> По-моему, не все внимательно прочитали заглавное сообщение темы.
по моему ты статью/комментарии вообще не читал.


 
Rouse_ ©   (2013-02-06 12:51) [16]

ЗЫ: а вообще судя по коду ошибки происходит обращение к полям обниленного объекта.


 
sniknik ©   (2013-02-06 12:54) [17]

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


 
sniknik ©   (2013-02-06 13:14) [18]

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


 
Pit   (2013-02-06 13:14) [19]


> то у тебя DataSetExample не инициализирован.


>  а вообще судя по коду ошибки происходит обращение к полям
> обниленного объекта.

а как вы это определили?


> Read of address 00000008

?

Типа объект nil, берется значение какого-то поля по смещению $08?

Ну логично, конечно, но ведь это и может быть обращение к какому-то совсем смежному объекту, в том числе обниленному. То есть, например, поле в виде объекта не инициализировано...

Сейчас проверим


 
Pit   (2013-02-06 13:16) [20]


> поставь дам бряк, жди пока сработает

а где ставится бряк по адресу?


 
Pit   (2013-02-06 13:18) [21]


> а где ставится бряк по адресу?

нашел, так и называется видимо: Address Breakpoint


 
Rouse_ ©   (2013-02-06 13:22) [22]


> Ну логично, конечно, но ведь это и может быть обращение
> к какому-то совсем смежному объекту, в том числе обниленному.

Ну а какая разница? Объект то по любому обнилен, не важно смежный он или нет.


> Address Breakpoint

Угу, через него, но можно и проще. F7, переходим в CPU-View, там Ctrl+G, вбиваем требуемый адрес, ставим бряк.


 
Pit   (2013-02-06 13:27) [23]


> Ну а какая разница? Объект то по любому обнилен, не важно
> смежный он или нет.

важно. У меня же попадает в функцию ссылку на датасет. То есть, код аля:

procedure fillData(ds: TCustomADODataSet);
begin
 bla bla bla...
 ds.LoadFromFile(xxx);
 bla bla bla...
end;


Все таки проверить ds на то, что он не nil - можно и, видимо, нужно. А вот проверить все его поля на валидность - уже перебор, имхо. Это уже должен быть контроль внутри VCL, имхо.


 
Pit   (2013-02-06 13:28) [24]


>  переходим в CPU-View, там Ctrl+G, вбиваем требуемый адрес,
>  ставим бряк.

а если поставить на данные - будет срабатывать BP при считывании этой переменной?


 
Rouse_ ©   (2013-02-06 13:41) [25]

На данные работает через установку PAGE_GUARD, т.е. бряк поднимется в случае если произойдет запись по адресу переменной.
грубо если переменная TEST была обнилена и бы выставляешь бряк на данные по ее адресу, то бряк сработает в том случае когда он изменит значение с NIL на что-то другое. Т.е. только при записи.
На чтение меморибряки в дельфи почему-то не реализованы.


 
Rouse_ ©   (2013-02-06 13:43) [26]

зы: точнее в дельфи реализовано только PAGE_READ (а не более правильный PAGE_GUARD) чтобы отслеживать исключение при записи


 
Pit   (2013-02-06 13:52) [27]


> очнее в дельфи реализовано только PAGE_READ

судя по твоему же описанию логично было бы назвать это PAGE_WRITE )


 
Pit   (2013-02-06 13:55) [28]

не, сам датасет задан, провел тест...

Pointer i_DataSet: 605665708

То есть перед вызовом LoadFromFile значение указателя было: 605665708

так что это какие-то внутренние структуры или типа того...


 
Ega23 ©   (2013-02-06 14:13) [29]


> Все таки проверить ds на то, что он не nil - можно и, видимо,
>  нужно. А вот проверить все его поля на валидность - уже
> перебор, имхо. Это уже должен быть контроль внутри VCL,
> имхо.


Это может ничего не дать:

var
 ds: TCustomADODataSet;
begin
 ds := TCustomADODataSet.Create(nil);
 try
   /// bla-bla-bla
 finally
   ds.Free;
 end;
 FillData(ds);
end;
 


Ищи утечку памяти.


> А вот проверить все его поля на валидность - уже перебор,
>  имхо. Это уже должен быть контроль внутри VCL, имхо.

VCL не очень хорошо с ADO работает. Точнее, работал в своё время. Как сейчас - ХЗ, но судя по тому, что проблему с BCD они так и не исправили, то также не очень хорошо работает. Лично я всегда даже параметры вручную добавлял, ибо напарывался несколько раз на ерунду.


 
sniknik ©   (2013-02-06 14:13) [30]

> Это уже должен быть контроль внутри VCL, имхо.
ошибка не в нем. не ИМХО.

> так что это какие-то внутренние структуры или типа того...
скорее твои обработчики событий или типа того...

p.s. но вообще, нафиг, партизан не разговорчивый/и не доверчивый попался, толку в "обсуждении" нет.


 
Ega23 ©   (2013-02-06 14:15) [31]


>  партизан не разговорчивый/и не доверчивый

Дык фирменный стиль же!
- Как сделать ХХХ?
- Вот так-то и так-то.
- Нет, так делать нельзя, надо делать вот так вот и вот так.

А нафига тогда спрашивать вообще?


 
sniknik ©   (2013-02-06 14:15) [32]

> что проблему с BCD они так и не исправили
его нет. есть тип "деньги". с ним работает правильно (но неожиданно, если ожидаешь BCD).


 
Ega23 ©   (2013-02-06 14:21) [33]


> его нет. есть тип "деньги". с ним работает правильно (но
> неожиданно, если ожидаешь BCD).

А numeric, он как?  
Чёрт, давно я не ковырялся, надо поставить какой-нить MSSQL поиграццо, что-ли...


 
Rouse_ ©   (2013-02-06 14:22) [34]


> Pit   (06.02.13 13:52) [27]
>
> > очнее в дельфи реализовано только PAGE_READ
>
> судя по твоему же описанию логично было бы назвать это PAGE_WRITE

Такой флаг не существует PAGE_WRITE. Т.е. нельзя разрешить писать, запретив при этом читать. Для этого как раз и используют комбинацию PAGE_GUARD где проверяют тип исключение - при чтении или при записи.


> То есть перед вызовом LoadFromFile значение указателя было:
>  605665708

ну для теста проверь все поля на клиенте и выведи тоже в лог, а то гадание на кофейной гуще получается.


 
sniknik ©   (2013-02-06 14:23) [35]

> А numeric, он как?  
также. все через "деньги". во всяком случае до D7 включительно, дальше может поменяли и реальный BCD ввели.


 
Ega23 ©   (2013-02-06 14:30) [36]


> также. все через "деньги". во всяком случае до D7 включительно,
>  дальше может поменяли и реальный BCD ввели.
>

Вот я, фактически, на D7 c ADO работу и закончил. Но кто-то мне говорил (Димка Тимохов, вроде), что с numeric так до сих пор и никак.
Впрочем, это уже оффтоп.


 
Pit   (2013-02-06 15:15) [37]


> скорее твои обработчики событий или типа того...

ни одного обработчика на DataSet не назначено.


 
sniknik ©   (2013-02-06 15:23) [38]

> ни одного обработчика на DataSet не назначено.
рад за тебя.


 
Pit   (2013-02-06 15:46) [39]

Блин, как же геморно так отлаживать...
Я модифицировал ADODB, DB немного и вот что вышло по логам.

> procedure TCustomADODataSet.LoadFromFile(const FileName: WideString);
 Close;
 CommandType := cmdFile;
 LockType := ltBatchOptimistic;
 CommandText := FileName;
 Open; // <--- ЗДЕСЬ


здесь исключение возникает на вызове Open.

Рассмотрим:

> procedure TDataSet.SetActive(Value: Boolean);
begin
 if (csReading in ComponentState) then
 begin
   FStreamedActive := Value;
 end
 else
   if Active <> Value then
   begin
     if Value then
     begin
       DoBeforeOpen;
       try
         OpenCursor;
       finally
         if State <> dsOpening then
           OpenCursorComplete; // < ----- ЗДЕСЬ
       end;
     end else
     begin
       if not (csDestroying in ComponentState) then DoBeforeClose;
       SetState(dsInactive);
       CloseCursor;
       if not (csDestroying in ComponentState) then DoAfterClose;
     end;
   end;
end;


Здесь исключение на строчке: OpenCursorComplete

Дальше логирования не делал. Но видно, что внутрях OpenCursorComplete где-то еще несколько раз вызывается SetActive, который не отрабатывает (передается Value равное уже установленному), но один раз исполняется блок:

       if not (csDestroying in ComponentState) then DoBeforeClose;
       SetState(dsInactive);
       CloseCursor;
       if not (csDestroying in ComponentState) then DoAfterClose;


То есть, соответствующий SetActive(False)

В результате из первого вызова OpenCursorComplete так и вылетает с AV, которое поднимается все дальше и выше, которое я уже и ловил в программе (точнее, модуле DLL).


 
Ega23 ©   (2013-02-06 15:56) [40]

Ты бы в первую очередь версию OLEDB проверил.


 
Pit   (2013-02-06 16:05) [41]


> Ты бы в первую очередь версию OLEDB проверил.

собственно, а какая версия нужна? Я не в курсе..

Есть понимание, что конкретно на тех компьютерах что-то не то (причем, там ДВА компьютера и с одинаковой проблемой).

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

Сейчас буду узнавать hInstance и по методу Розыча узнавать по MAP файлу где собственно проблема.


 
Ega23 ©   (2013-02-06 16:17) [42]


> я считаю

Я не пойму никак: у тебя проблема, или ты таки считаешь?


 
знайка   (2013-02-06 16:41) [43]


> собственно, а какая версия нужна? Я не в курсе..
что пишем? :)


 
Rouse_ ©   (2013-02-06 16:42) [44]

Ты лучше попробуй эврику нормально сконфигурировать.
Протестировать просто, объяви левую функцию экспортируемую и в ней к примеру

PInteger(0)^ := 123;

из программы ее дергай. Если эврика нормально настроена, должна по логике поймать и вывести лог.


 
Pit   (2013-02-06 16:44) [45]


> что пишем? :)

а какая разница?
Сервер приложения отвечает таким форматом. Он сохраняется в файл, на этот файл натравливается AdoQuery


 
Pit   (2013-02-06 16:56) [46]


> Ты лучше попробуй эврику нормально сконфигурировать.

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

1) это я озвучивал уже, несмотря на то, что DLL я собрал с еврикой и EAccessViolation точно произошел - нигде не обнаружил файла .elf
думаю пока, может прав доступа в каталог с EXE нету? Хз...

2) эврика когда раскручивает стек она вроде бы в VCL модули не заходит, да? А можно это как-то реализовать?


 
KSergey ©   (2013-02-06 17:04) [47]

> Pit   (06.02.13 16:05) [41]
>
> > Ты бы в первую очередь версию OLEDB проверил.
>
> собственно, а какая версия нужна? Я не в курсе..

Для начала просто поставить ее, последней версии, например.


 
Потапыч   (2013-02-06 17:09) [48]

TeamViewеr пробовал? ;)


 
sniknik ©   (2013-02-06 17:11) [49]

> на этот файл натравливается AdoQuery
ну вот и почему все странности именно у использующих его? это рок.

вот это
try
[DataSetExample].LoadFromFile(...)
except on E: Exception do
Вывод в лог...


замени на
try
 sName:= ...
 with TADODataSet.Create(nil) do
   try
     LoadFromFile(sName);
   finally
     Free;
   end;
except on E: Exception do
 Вывод sName
 Вывод в лог...

и покажи записанную имяфайла-ошибку

> может прав доступа в каталог с EXE нету? Хз...
может и к файлу там нету?


 
Inovet ©   (2013-02-06 17:15) [50]

> [48] Потапыч   (06.02.13 17:09)
> TeamViewеr пробовал?

Версии всего окружения посмотреть?


 
sniknik ©   (2013-02-06 17:18) [51]

> может прав доступа в каталог с EXE нету? Хз...
кстати если в программ файлес на вин7/... пишется то там может быть редирект в папку данных программы. "операционка" заботится. т.е. он пишется, но не туда где ждешь.


 
Pit   (2013-02-06 17:20) [52]


> замени на

не могу. Это общий модуль, по сути принимает SQL-запрос и TCustomADODataSet, в который и пихает результат запроса.


> и покажи записанную имяфайла-ошибку

ошибку показывал:

Access violation at address 0F53510A in module "MY_MOD~1.DLL". Read of address 00000008

Имя файла верное, файл реально существует на диске:
как пример: C:\WINDOWS\TEMP\{101FBAFD-39D0-4824-ABBF-23BA6435FC29}.xml


 
Rouse_ ©   (2013-02-06 17:27) [53]


> эврика когда раскручивает стек она вроде бы в VCL модули
> не заходит, да? А можно это как-то реализовать?

Заходит.


> нигде не обнаружил файла .elf

проверь галку о том что запись должна вестись.
Можешь перенастроить путь, если не пишет туда куда доступа нет.

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


 
Rouse_ ©   (2013-02-06 17:29) [54]


> Rouse_ ©   (06.02.13 17:27) [53]
> Заходит.

точныы если не подключена галка Use debug dcu`s то будет просто адреса со стека выводить, а если включена, тогда и имена процедур и т.п. выведет


 
sniknik ©   (2013-02-06 17:29) [55]

> не могу. Это общий модуль, по сути принимает SQL-запрос и TCustomADODataSet, в который и пихает результат запроса.
но поставить временно перед основным в собственном try except с маркеров логе что именно оттуда... ?

> ошибку показывал:
нет, нужно от "моего" кода. без этого это не проверка.

> Имя файла верное, файл реально существует на диске:
нет, интересует на момент ошибки, а не "как пример". иначе это не проверка.


 
sniknik ©   (2013-02-06 17:31) [56]

> с маркеров
с маркером


 
Pit   (2013-02-06 18:13) [57]

проблема решена.

sniknik, ты был считай прав. Оказывается к датасету был привязан датсурс, к нему привязан cxGrid, а вот на событие cxGrid"а и был код невалидный.

Выявил это по методу Розыча, поставил BP на вычисленный адрес exception"а с учетом сдвигов.

Всем спасибо!


 
Pit   (2013-02-06 18:16) [58]


> sniknik, ты был считай прав. Оказывается к датасету был
> привязан датсурс, к нему привязан cxGrid, а вот на событие
> cxGrid"а и был код невалидный.

при этом Disable(Enable)COntrols почему то не был использован.


 
Плохиш ©   (2013-02-06 18:32) [59]


> (да и вообще по старой мастаковоской привычке пытаются обосрать
> больше, чем помочь)

Я так понимаю, что это в итоге надо считать оскорблением отвечающих!


 
знайка   (2013-02-06 18:54) [60]


> ты был считай прав
оборжаться

а невалидный код был только на 2 машинах? :)


 
Pit   (2013-02-06 21:08) [61]


> а невалидный код был только на 2 машинах? :)

нет, настройки из БД которые они тянули были специфичные для этого места, в связи с чем код создавал AV


> точныы если не подключена галка Use debug dcu`s то будет
> просто адреса со стека выводить, а если включена, тогда
> и имена процедур и т.п. выведет

от этой галочки зависит наличие имен методов в отчете .elf?

А я всегда думал, что эта галочка влияет только на исполнение под средой, она типа подтягивает дебажные dcu, чтобы отладчик мог бегать по исходникам стандартных компонент. А на конечный EXE это не влияет...


 
Rouse_ ©   (2013-02-06 21:34) [62]


> от этой галочки зависит наличие имен методов в отчете .elf?

от нее зависит генерация МАР файла, по которому имена и распознаются.


 
Rouse_ ©   (2013-02-06 21:35) [63]


> Pit   (06.02.13 21:08) [61]
> нет, настройки из БД которые они тянули были специфичные
> для этого места, в связи с чем код создавал AV

Кстати, в итоге мое предположение об обниленом объекте верное было?


 
Rouse_ ©   (2013-02-06 21:40) [64]


> Rouse_ ©   (06.02.13 21:34) [62]
> от нее зависит генерация МАР файла, по которому имена и
> распознаются.

зы: ну а МАР файл уже конвертится в ресурсы и линкуется к конечному экзешнику. Методика практически целиком слизана у джедаев, но достаточно хитро допилена в уровне эвристики на разборе стека вызовов (относится только для Эврики, у MadExcept свое).


 
Inovet ©   (2013-02-06 22:17) [65]

> [61] Pit   (06.02.13 21:08)
> настройки из БД которые они тянули были специфичные для
> этого места, в связи с чем код создавал AV

Т.е. бэкап БД, развёрнутый у тебя, мог выявить причину?


 
Pit   (2013-02-06 23:53) [66]


> ну а МАР файл уже конвертится в ресурсы и линкуется к конечному
> экзешнику.

погодь, так map файл генерится только если указана соответствующая опция. Я же могу включить еврику и НЕ включать генерацию map файла  (ну он не появится рядом с EXE) или еврика умная и как-то все равно заставляет генерировать map-файл?


> Методика практически целиком слизана у джедаев, но достаточно
> хитро допилена в уровне эвристики на разборе стека вызовов

слушай, а как еврика выдает строчку кода? Ведь в map файле только начало - концы методов, то есть можно сказать что адрес такой-то - он внутри метода такого-то, но как возможно указать конкретную строчку?


> Кстати, в итоге мое предположение об обниленом объекте верное
> было?

да, все подтвердилось. Малый адрес в AV действительно правильно сигнализировал о вызове метода обниленного объекта. И как раз в этом методе идет обращение к полю класса, который описан вторым, типа

TMyClass = class
private
 FInternal1: TMyInternal1;
 FInternal2: TMyInternal2;
...


и обращение в методе генерировавшем AV было к FInternal2


> Т.е. бэкап БД, развёрнутый у тебя, мог выявить причину?

а БД и так едина. Просто тянет свои настройки.
Сложная система, долго объяснять. В принципе сейчас задним умом я уже понимаю пару способов, как бы я мог вызвать эмуляцию ошибки на своей девелоперской машине... Но изначально полностью повторить окружение - нереал. На удаленной машине там и права другие, плюс системы защиты стоят специфические, плюс... ну короче много специфики.


 
Rouse_ ©   (2013-02-07 00:01) [67]


> погодь, так map файл генерится только если указана соответствующая
> опция. Я же могу включить еврику и НЕ включать генерацию
> map файла  (ну он не появится рядом с EXE) или еврика умная
> и как-то все равно заставляет генерировать map-файл?

На уровне эксперта она включает данную опцию при активации самой эврики. Если снял после её включения - то есесно файла и не будет.


> слушай, а как еврика выдает строчку кода? Ведь в map файле
> только начало - концы методов, то есть можно сказать что
> адрес такой-то - он внутри метода такого-то, но как возможно
> указать конкретную строчку?

Они все есть в МАР, ну точнее их оффсеты (в виде кода) ну и адресные оффсеты соответственно, по которым и идет привязка.


> да, все подтвердилось.

Ну значит на что-то еще гожусь :)


 
Германн ©   (2013-02-07 01:58) [68]


> погодь, так map файл генерится только если указана соответствующая
> опция.

Никогда не понимал тех, кто снимал эту галку! Ну чем она мешает?


 
Rouse_ ©   (2013-02-07 10:24) [69]


> Германн ©   (07.02.13 01:58) [68]
> Никогда не понимал тех, кто снимал эту галку! Ну чем она
> мешает?

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


 
Pit   (2013-02-07 10:44) [70]


> Немного увеличивает вес приложения

почему?!?!
Это если включать отладочную инфу в EXE. А MAP-файл то что, он генерится рядом с EXE...?


 
Rouse_ ©   (2013-02-07 11:58) [71]


> Pit   (07.02.13 10:44) [70]
> почему?!?!

С этим не разбирался.


 
Cobalt ©   (2013-02-07 18:23) [72]

Pit
пойми одну простую вещь. На таком коде:
try
[DataSetExample].LoadFromFile(...)
except on E: Exception do
Вывод в лог...

Эврика ничего не будет ловить.
потому что ты уже всё поймал и обработал.

Сравни на чистом проекте с Эврикой:
 Caption := DateToStr(StrToDateTime("99/99/1998", Date));
и
 Caption := DateToStr(StrToDateTimeDef("99/99/1998", Date));

Так что убирай свои try/except, и тогда за работу возьмётся Эврика.


 
Rouse_ ©   (2013-02-07 18:41) [73]


> Эврика ничего не будет ловить.
> потому что ты уже всё поймал и обработал.

Зависит от настроек Эврики. При желании она ловит все что угодно.


 
Pit   (2013-02-07 19:01) [74]


> Так что убирай свои try/except, и тогда за работу возьмётся
> Эврика.

ты настройки еврики то видел? Там четко можно задать отлавливать "Handled" исключения или "Unhandled" или все подряд.


 
Cobalt ©   (2013-02-08 09:35) [75]

Вот только у меня (Д7)
Опция "Catch handled exceptions"  не отлавливает ошибку в
StrToDateTimeDef("99/99/1998", Date)


 
Rouse_ ©   (2013-02-08 10:25) [76]


> Cobalt ©   (08.02.13 09:35) [75]
> Вот только у меня (Д7)
> Опция "Catch handled exceptions"  не отлавливает ошибку
> в

А с какого перепуга должен-то?
Не знаю что там в семерке, но в 2010-ой StrToDateTimeDef вызывает TryStrToDateTime где происходит парсинг строки на котором падений быть не должно


 
Pit   (2013-02-08 10:32) [77]


> Опция "Catch handled exceptions"  не отлавливает ошибку
> в
> StrToDateTimeDef("99/99/1998", Date)

там еще обычно тип исключения настраивается.

По-умолчанию, еврика отлавливает все необработанные исключения, а также все исключения типа EAccessViolation.


 
Pit   (2013-02-08 10:33) [78]


> Не знаю что там в семерке, но в 2010-ой StrToDateTimeDef

блин, действительно. Все функции оканчивающиеся на "...Def" не вызываеют исключения, в случае ошибки - они возвращаются указанное Default значение.


 
brother ©   (2013-02-08 10:36) [79]

да ты что???) а мужики то не знают)


 
Ega23 ©   (2013-02-08 11:20) [80]


> блин, действительно. Все функции оканчивающиеся на "...Def"
> не вызываеют исключения, в случае ошибки - они возвращаются
> указанное Default значение.


Чё там говоришь, за 2 недели не получится никак? :)))



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

Текущий архив: 2013.06.16;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.008 c
15-1360355402
Юрий
2013-02-09 00:30
2013.06.16
С днем рождения ! 9 февраля 2013 суббота


15-1360268057
картман
2013-02-08 00:14
2013.06.16
как сделать?


2-1352484268
Writer32
2012-11-09 22:04
2013.06.16
Непонятки с png-форматом


15-1360300655
alexdn
2013-02-08 09:17
2013.06.16
Косм телескоп Джеймс Вебб


15-1360259305
Ega23
2013-02-07 21:48
2013.06.16
Внезапно возник вопрос