(решено) heaptrc error"96 used in system startup"

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

(решено) heaptrc error"96 used in system startup"

Сообщение vitaly_l »

Всем хорошего настроения!

Дано: heaptrc
Возвращает: error "96 used in system startup" (как на картинке)
Вроде ничего не рушится, но всё равно непонятно, зачем оно это 96 in system startup?
:?: :arrow: Как искать причину? :oops: :cry:

Спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось vitaly_l 14.04.2017 08:21:19, всего редактировалось 1 раз.
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Посмотри в исходниках heaptrc. Вообще похоже на баг, что EntryMemUsed запоминается в TraceInitThread вместо initialization, но это не твой случай (цифры сходятся) и вообще ты сорт оф второй человек в мире, который вообще читал отчёт об отсутствии утечек дальше четвёртой строки XD.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

runewalsh писал(а):TraceInitThread

Да действительно, я совсем забыл что можно же смотреть в коде. Спасибо за верный посыл. Нашёл вот это:
SysGetFPCHeapStatus => http://lazarus-ccr.sourceforge.net/docs ... tatus.html
Там сказано вот это:

Код: Выделить всё

SysGetFPCHeapStatus

Return the status of the FPC heapmanager

Declaration
Source position: heaph.inc line 77
function SysGetFPCHeapStatus: TFPCHeapStatus;

Description
SysGetFPCHeapStatus returns the status of the default FPC heapmanager. It is set as the default value of the corresponding GetFPCHeapStatus function.

Errors
None. The result of this function is bogus information if the current heapmanager is not the standard FPC heapmanager.

See also
GetFPCHeapStatus
 
Return FPC heap manager status information

SysGetFPCHeapStatus.CurrHeapUsed - вроде не похоже на ошибку.

Кроме того нашёл, что утечку ищут вот так:

Код: Выделить всё

  Data:=getfpcheapstatus.currheapused;
  test;
  Writeln ('Lost ',getfpcheapstatus.currheapused-data);
  // Выводим - сколько байт памяти потеряно (результат = 0)

Соответственно это просто какая-то фигня выводится, о том что, что-то там занимает 96 чего-то.
.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

96 байт было выделено rtlем до того как heaptrc начал работать. Так всегда, не обращай внимание

Добавлено спустя 19 минут 23 секунды:
Re: heaptrc error"96 used in system startup" как искать причину?
>>heaptrc error
кто тебе сказал что это еррор?
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

Лол, оно использует MessageBox со стилем "сообщение об ошибке" для вывода информации. Кому-то было в лом возиться, нужный стиль подставлять :D
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):до того как heaptrc начал работать

Ага... теперь совсем понял. я думал что это так, но heaptrc по идее запускается самым первым. но по логике подходит.
Cheb писал(а):Кому-то было в лом возиться, нужный стиль подставлять

Верю и понимаю, но решил перестраховаться на форуме, что это именно так.

Всем большущее спасибо, теперь мне не страшен этот "серый волк".
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>Лол, оно использует MessageBox со стилем "сообщение об ошибке" для вывода информации
По крайней мере в win32 оно используется под аргументы командной строки. как в консольном, так и гуишном вариантах

>>но heaptrc по идее запускается самым первым
Первым инициализируется system т.к. он неявно uses первым у любого модуля, потом уже то что объявлено программистом
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):Первым инициализируется system т.к. он неявно uses первым у любого модуля, потом уже то что объявлено программистом

:roll: Вообще-то в инструкции сказано, что он запускается первым, при команде: -gh. И там сказано, что это (-gh) именно для запуска его первым, так сделано. Но это в общем-то не актуально, т.к. теперь стало ясно-понятно что, там что-то подгружается раньше него и занимает 96 чего-то.

Но почему-то, иногда это сообщение (про 96 чего-то) - не выскакивает. И вот это напрягло. Но я в любом случае не копенгаген - это починить, т.к. это явно не в моей власти.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>не выскакивает.
ниразу не видел такого. у меня в вин32 - 80 (не 96) всегда при запуске не из иде. если есть параметры командной строки то больше

Добавлено спустя 3 минуты 53 секунды:
>>Вообще-то в инструкции сказано, что он запускается первым
Как ты представляешь его работу если rtl еще не инициализирована? он такой весь самодостаточный?
system в неявном uses у heaptrc, heaptrc это обычный модуль, просто переопределяет функции менеджера пямяти на себя.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):80 (не 96)

Да их в основном три типа, судя по топикам: 80, 96 и 144. Возможно это как-то завязано на железе или действительно на консоль/не консоль.
zub писал(а):Как ты представляешь его работу если rtl еще не инициализирована? он такой весь самодостаточный?

Боюсь - этот, с виду простой вопрос - для меня слишком сложный, т.к. мой мозг мгновенно подвис и предложил мне лучше заняться сегодня рисованием. :cry:
zub писал(а):system в неявном uses у heaptrc, heaptrc это обычный модуль, просто переопределяет функции менеджера пямяти на себя.

Код: Выделить всё

По умолчанию в первой секции uses неявно первым подключается системный модуль PABCSystem, содержащий стандартные константы, типы, процедуры и функции. Даже если раздел uses отсутствует, модуль PABCSystem подключается неявно. Кроме того, по умолчанию с помощью неявной директивы $reference подключаются сборки System.dll, System.Core.dll и mscorlib.dll, содержащие основные .NET-типы.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Что за АВСхрень ты постишь?
http://wiki.freepascal.org/Uses
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

zub писал(а):Что за АВСхрень ты постишь?

Первую, хрень которую выдал goooogl. Я даже не вникал, что именно там написано, просто убедился что оно "как-то примерно так про неявное в uses" и перепостил прочитанное. А оно действительно не к месту. Но это не я виноват... это всё гуууууугл - правильно искать не умеет :wink:
Ответить