Ada_Ru форум

Обсуждение языка Ада

Размер бинарников Ada

Оставить новое сообщение

Сообщения

rainbow-2000
Размер бинарников Ada
2006-05-26 15:47:13

Всем, привет!

 

Друзья, написал я тут маленькую программку на Ada (35 строк), чисто для эксперимента

 

-- guess_number_int.adb, a version without new types

-- This is a simple guessing game; the player has 10 attempts

-- to guess a 'secret' number

 

with Ada.Text_IO; use Ada.Text_IO;

with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

 

procedure Guess_Number_Int is

---------------------------Declarations------------------------------

X : constant Integer := 70;

Max_Attempts : constant Integer := 10;

Y : Integer;

---------------------------------------------------------------------

begin

for N in 1..Max_Attempts loop

Put ("Attempt");

Put (N);

New_Line;

Put_Line ("------------------");

Get (Y);

if Y = X then

Put_Line ("Congratulations !!! You are right.");

exit;

end if;

if Y < X then

Put_Line ("No, Secret Number is greater.");

end if;

if Y > X then

Put_Line ("No, Secret Number is smaller.");

end if;

if N = Max_Attempts then

Put_Line ("Last Attempt !!!");

end if;

end loop;

end Guess_Number_Int;

---------------------------------------------------------------------

 

и случайно мой взгляд упал на размер получившегося бинарника.

Честное слово, я был в шоке

 

-rwxr-xr-x 1 alexey users 603K May 26 17:31 guess_number

-rw-r--r-- 1 alexey users 1.2K May 26 17:31 guess_number.adb

-rw-r--r-- 1 alexey users 1.3K May 26 17:44 guess_number.adb~

-rw-r--r-- 1 alexey users 2.5K May 26 17:31 guess_number.ali

-rwxr-xr-x 1 alexey users 602K May 26 17:53 guess_number_int

 

602 K ! Я полез в директорию, где у меня мои проги на C++ и вот, что я увидел (первое попавшееся)

 

-rwxr-xr-x 1 alexey users 20K May 26 16:44 a.out

 

Это бинарник драйвера custom-списка, который я недавно тестировал для своей программы. Размер драйвера - 31 строка, но он использует всякие классы (размером по 540 строк и т.п.) 20 K!

 

20K и 602K !!!

 

В чём тут дело? Почему такая разница!? Это же офигеть можно!!!

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

 

По-моему для такой маленькой программки 602K -- это явно многовато.

 

Это что же получается, если я начну на Ada делать какую-нибудь полезную для общества библиотеку (есть такая мысль :) ), то каков будет размер бинарника если количество строк кода будет не 35, а, скажем, 3500 ?

 

Можно этот феномен как-нибудь объяснить (С++ проги компилировались gcc-3.4.5, Ada -- GNAT GPL 2005 (20050729))?

Всё в среде Linux, gcc-3.4.5.

Команды были такие:

С++: g++ -ansi -pedantic -O3 -fforce-addr ...

Ada: gnatmake -ansi -pedantic -O3 -fforce-addr ... В общем, идентичные.

 

 

Алексей

On Sat, May 27, 2006 at 02:47:13AM +1100, rainbow-2000 wrote:

Можно этот феномен как-нибудь объяснить (С++ проги компилировались gcc-3.4.5, Ada -- GNAT GPL 2005 (20050729))?

 

Можно.

1) Сделай strip guess_number_int и получишь екзешник весом 164К.

2) Сделай ldd a.out и увидишь ссылку на библиотеку типа

/usr/lib/gcc/i686-pc-linux-gnu/3.4.5/libstdc++.so.6

размер которой около 826К.

 

В Ада программе у тебя адский рантайм вкомпилирован в саму

программу статически, а в С++ вынесен в динамическую либу.

 

--

Maxim Reznik

Можно этот феномен как-нибудь объяснить (С++ проги компилировались gcc-3.4.5, Ada -- GNAT GPL 2005 (20050729))?

 

1. Примените strip к адскому исполняемому файлу. У меня получилось

 

-rwxr--r--+ 1 rybin None 138752 May 26 20:06 guess_number_int.exe

 

Все-таки не 602К

 

2. Программа использует две здоровые библиотеки - Ada.Text_IO и

Ada.Integer_Text_IO, размер в основном от них. Можно попытаться

применить gnatelim... Счас попробую... Нет, на этом примере

эффекту нет.

 

3. На *реадльных* программах, когда размер, добавляемый стандартными

библиотеками, становится не столь существенным, разница сходит на

нет.

 

4. Да и кому какое дело до размера исполняемого файла, если его не

в телефон, а в нормальный компутер грузить для выполнения?

Максим, Сергей Игоревич, спасибо!

 

Действительно, размер уменьшился, если применить strip, а если посмотреть зависимости с помощью ldd, то, да, есть ссылка на библиотеку

 

ldd /home/alexey/cprogs/c++_test/a.out

/usr/lib/libGL.so.1 (0xb7f6c000)

linux-gate.so.1 => (0xffffe000)

libstdc++.so.6 => /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/libstdc++.so.6 (0xb7e8a000)

libm.so.6 => /lib/libm.so.6 (0xb7e68000)

libgcc_s.so.1 => /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/libgcc_s.so.1 (0xb7e5f000)

libc.so.6 => /lib/libc.so.6 (0xb7d4b000)

libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0xb75e2000)

libnvidia-tls.so.1 => /usr/lib/tls/libnvidia-tls.so.1 (0xb75df000)

libXext.so.6 => /usr/lib/libXext.so.6 (0xb75d1000)

libX11.so.6 => /usr/lib/libX11.so.6 (0xb7507000)

libdl.so.2 => /lib/libdl.so.2 (0xb7503000)

/lib/ld-linux.so.2 (0xb7feb000)

 

 

-rwxr-xr-x 1 root root 791K Feb 2 03:47 /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/libstdc++.so.6.0.3

 

размером 791K.

 

Если применить ту же команду к guess_number_int, то там будет примерно такая же картина:

 

ldd guess_number_int

/usr/lib/libGL.so.1 (0xb7f6c000)

linux-gate.so.1 => (0xffffe000)

libgcc_s.so.1 => /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/libgcc_s.so.1 (0xb7f4b000)

libc.so.6 => /lib/libc.so.6 (0xb7e37000)

libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0xb76ce000)

libnvidia-tls.so.1 => /usr/lib/tls/libnvidia-tls.so.1 (0xb76cc000)

libm.so.6 => /lib/libm.so.6 (0xb76aa000)

libXext.so.6 => /usr/lib/libXext.so.6 (0xb769b000)

libX11.so.6 => /usr/lib/libX11.so.6 (0xb75d1000)

libdl.so.2 => /lib/libdl.so.2 (0xb75cd000)

/lib/ld-linux.so.2 (0xb7feb000)

 

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

 

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

 

Допустим, я хочу написать GUI Toolkit (a la FOX) на Ada. Выходит, что если 50 программ будут зависеть от библиотек (стандартных + моя), то 50 раз все эти библиотеки будут включены в эти программы? Если так, то это, конечно, не дело. А какой-нибудь выбор есть? Можно, например, сделать, чтобы 50 программ использовали те же Ada.Text_IO и Ada.Integer_Text_IO совместно (как shared) по желанию?

 

Sergey I. Rybin wrote:

 

 

4. Да и кому какое дело до размера исполняемого файла, если его не

в телефон, а в нормальный компутер грузить для выполнения?

 

Да, если вести речь об embedded systems, то здесь размер, конечно, имеет значение.

 

 

Алексей

Допустим, я хочу написать GUI Toolkit (a la FOX) на Ada. Выходит, что если 50 программ будут зависеть от библиотек (стандартных + моя), то 50 раз все эти библиотеки будут включены в эти программы? Если так, то это, конечно, не дело. А какой-нибудь выбор есть? Можно, например, сделать, чтобы 50 программ использовали те же Ada.Text_IO и Ada.Integer_Text_IO совместно (как shared) по желанию?

 

Ну, если бы библиотеки включались по 50 раз, от нас давно б все

клиенты разбежались :)

 

4. Да и кому какое дело до размера исполняемого файла, если его не

в телефон, а в нормальный компутер грузить для выполнения?

 

 

Да, если вести речь об embedded systems, то здесь размер, конечно, имеет значение.

 

embedded systems - это очень широкий класс систем, от брелка автомобильной

сигнализации до системы организации воздушного движения в масштабах континента.

Для телефонов и брелков размер исходника существенен, а вот для системы, встроенной

в самолет - уже наплевать, там важнее другое.

Saturday, 27. May 2006 08:39, rainbow-2000 Ви написали:

Действительно, размер уменьшился, если применить strip, а если

А если еще и динамически слинковать.. вообще сказка получается:

[gerr@aldar ada]$ eselect gnat show

Current gnat version:

x86_64-pc-linux-gnu-gnat-gcc-4.1

Active libs:

[1] booch_components

[2] gtkada

[3] xmlada

[gerr@aldar ada]$ gnatmake \

guess_number_int.adb -cargs -O2 -fPIC -bargs -shared -largs -shared -s gnatgcc -c -O2 -fPIC guess_number_int.adb

gnatbind -aO./ -shared -I- -x guess_number_int.ali

gnatlink guess_number_int.ali -shared-libgcc -shared

GS> -s в largs сразу стрипает..

[gerr@aldar ada]$ ls -l guess_number_int

-rwxr-xr-x 1 gerr users 16592 2006-05-27 09:44 guess_number_int*

итого 16к - достаточно?

(причем на 64х битах, хотя вряд-ли в данном случае это сильно повлияет..)

George

Но, с другой стороны...Это что, получается всегда библиотеки будут

включаться в бинарник целиком? Это же сколько места надо?

 

Обратите внимание на ключик gnatbind

 

-shared - Выполнить компоновку приложения с динамически связываемыми

библиотеками времени выполнения GNAT, если они доступны.

 

 

George Shapovalov wrote:

Saturday, 27. May 2006 08:39, rainbow-2000 Ви написали:

 

Действительно, размер уменьшился, если применить strip, а если

 

А если еще и динамически слинковать.. вообще сказка получается:

 

[gerr@aldar ada]$ eselect gnat show

Current gnat version:

x86_64-pc-linux-gnu-gnat-gcc-4.1

 

Active libs:

[1] booch_components

[2] gtkada

[3] xmlada

 

[gerr@aldar ada]$ gnatmake &#92; guess_number_int.adb -cargs -O2 -fPIC -bargs -shared -largs -shared -s

gnatgcc -c -O2 -fPIC guess_number_int.adb

gnatbind -aO./ -shared -I- -x guess_number_int.ali

gnatlink guess_number_int.ali -shared-libgcc -shared

 

GS> -s в largs сразу стрипает..

 

[gerr@aldar ada]$ ls -l guess_number_int

-rwxr-xr-x 1 gerr users 16592 2006-05-27 09:44 guess_number_int*

 

итого 16к - достаточно?

(причем на 64х битах, хотя вряд-ли в данном случае это сильно повлияет..)

 

George

 

 

Я скорее всего что-то не понимаю: действительно размер уменьшился до 15k, однако, попытка запустить бинарник приводит к segmentation fault.

 

-rwxr-xr-x 1 alexey users 15K May 27 14:55 guess_number_int

 

./guess_number_int

Segmentation fault

 

Друзья, спасибо за помощь в любом случае. А какой-нибудь gnat user's manual к компилятору прилагается? У себя я только нашёл ARM (Gentoo Linux) в директории ~/html, есть ещё примеры в директории ~/examples/, но там подходящего примера что-то не видно. В любом случае manual по gnat-у бы не помешал.

 

Алексей

Saturday, 27. May 2006 13:31, rainbow-2000 Ви написали:

Я скорее всего что-то не понимаю: действительно размер уменьшился до 15k, однако, попытка запустить бинарник приводит к segmentation fault.

Да, прошу прощения - несколько увлекся с параметрами..

в -largs должно быть только -s

-shared должно быть только в -bargs,

то есть комманда такая:

gnatmake guess_number_int -cargs -O2 -fPIC -bargs -shared -largs -s

заодно и размер результата уменьшается до 11к :). Видать ld пытается что-то там "дважды динамически" подлинковать, если вызывать как в первом случае..

Друзья, спасибо за помощь в любом случае. А какой-нибудь gnat user's manual к компилятору прилагается? У себя я только нашёл ARM (Gentoo Linux) в директории ~/html, есть ещё примеры в директории ~/examples/, но там подходящего примера что-то не видно. В любом случае manual по gnat-у бы не помешал.

info gnat

выдаст кучу информации как раз из user guide. Какой gnat кстати стоит? Если один из "новых" - gnat-gcc или gnat-gpl, то там gnat.info точно есть. Если "старый" (dev-lang/gnat, кстати, скоро я его уже наверное замаскирую) то там возможно нужно сказать "info gnat_ugn_unw", если этот симлинк не сделан.. Есть еще gnat_rm.info и gnat-style.info.

Помимо этого можно читать исходники (если вдруг нехватает подробностей по библиотекам например. Все *.ads для Gnat.* пакетов должны быть

установленны)..

George

George Shapovalov wrote:

Saturday, 27. May 2006 13:31, rainbow-2000 Ви написали:

 

Я скорее всего что-то не понимаю: действительно размер уменьшился до

15k, однако, попытка запустить бинарник приводит к segmentation fault.

 

Да, прошу прощения - несколько увлекся с параметрами..

 

в -largs должно быть только -s

-shared должно быть только в -bargs,

то есть комманда такая:

gnatmake guess_number_int -cargs -O2 -fPIC -bargs -shared -largs -s

 

заодно и размер результата уменьшается до 11к :). Видать ld пытается что-то там "дважды динамически" подлинковать, если вызывать как в первом случае..

 

 

George, супер!

 

9.3K на моей машине! Всё заработало!

 

info gnat

выдаст кучу информации как раз из user guide.

К сожалению нет info, если бы всё было так просто...

 

Какой gnat кстати стоит?

 

gnat

GNAT GPL 2005 (20050729)

Copyright 1996-2005 Free Software Foundation, Inc.

 

List of available commands

 

gnat bind gnatbind

gnat chop gnatchop

gnat clean gnatclean

gnat compile gnatmake -f -u -c

gnat elim gnatelim

gnat find gnatfind

gnat krunch gnatkr

gnat link gnatlink

gnat list gnatls

gnat make gnatmake

gnat metric gnatmetric

gnat name gnatname

gnat preprocess gnatprep

gnat pretty gnatpp

gnat setup

gnat stub gnatstub

gnat xref gnatxref

 

Commands find, list, metric, pretty, stub and xref accept project file switches -vPx, -Pprj and -Xnam=val

------------------------------------------------------------------------

Или совсем подробно:

 

emerge -s gnat-gpl

Searching...

[ Results for search key : gnat-gpl ]

[ Applications found : 1 ]

 

* dev-lang/gnat-gpl [ Masked ]

Latest version available: 3.4.5.1

Latest version installed: 3.4.5.1

Size of downloaded files: 41,614 kB

Homepage: https://libre2.adacore.com/

Description: GNAT Ada Compiler - AdaCore GPL version

License: GPL-2

------------------------------------------------------------------------

Если

один из "новых" - gnat-gcc или gnat-gpl, то там gnat.info точно есть. Если "старый" (dev-lang/gnat, кстати, скоро я его уже наверное замаскирую) то там возможно нужно сказать "info gnat_ugn_unw", если этот симлинк не сделан..

Есть еще gnat_rm.info и gnat-style.info.

 

info gnat_ugn_unw, понятное дело, тоже выдаёт заглавную страницу info (команда info без аргументов)

------------------------------------------------------------------------

Вот содержимое директории /usr/doc/gnat-gpl-3.4.5.1

 

ls -l /usr/doc/gnat*

total 58

-rw-r--r-- 1 root root 6849 Feb 2 04:34 COPYING.gz

drwxr-xr-x 13 root root 568 Feb 2 04:34 examples

-rw-r--r-- 1 root root 10418 Feb 2 04:34 features-503.gz

-rw-r--r-- 1 root root 10603 Feb 2 04:34 features-ada0y.gz

drwxr-xr-x 2 root root 13488 Feb 2 04:34 html

-rw-r--r-- 1 root root 7334 Feb 2 04:34 known-problems-503a.gz

-rw-r--r-- 1 root root 369 Feb 2 04:34 README.gz

------------------------------------------------------------------------

А вот содержимое другой директории:

 

ls -l /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/

total 0

drwxr-xr-x 2 root root 72 Feb 4 19:38 info

drwxr-xr-x 14 root root 336 Feb 2 04:34 locale

drwxr-xr-x 3 root root 72 Feb 2 04:34 man

------------------------------------------------------------------------

Но интересно, естественно, заглянуть что там внутри :) :

------------------------------------------------------------------------

ls -l /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/info

total 4

-rw-r--r-- 1 root root 853 Feb 2 04:34 dir.old

------------------------------------------------------------------------

cat /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/info/dir.old

This is the file .../info/dir, which contains the

topmost node of the Info hierarchy, called (dir)Top.

The first time you invoke Info you start off looking at this node.

 

File: dir, Node: Top This is the top of the INFO tree

 

This (the Directory node) gives a menu of major topics.

Typing "q" exits, "?" lists all Info commands, "d" returns here,

"h" gives a primer for first-timers,

"mEmacs<Return>" visits the Emacs manual, etc.

 

In Emacs, you can click mouse button 2 on a menu item or cross reference

to select it.

 

* Menu:

 

Programming

* Cpp: (cpp). The GNU C preprocessor.

* Cpplib: (cppinternals). Cpplib internals.

* gcc: (gcc). The GNU Compiler Collection.

* gccinstall: (gccinstall). Installing the GNU Compiler Collection.

* gccint: (gccint). Internals of the GNU Compiler Collection.

------------------------------------------------------------------------

вот такое здесь info :) Но давайте заглянем в man-ы :)

------------------------------------------------------------------------

ls -l /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/man/

total 0

drwxr-xr-x 2 root root 144 Feb 2 04:34 man1

------------------------------------------------------------------------

 

ls -l /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/man/man1

total 528

-rw-r--r-- 1 root root 37730 Feb 2 04:34 gnatcpp.1

-rw-r--r-- 1 root root 471236 Feb 2 04:34 gnatgcc.1

-rw-r--r-- 1 root root 23640 Feb 2 04:34 gnatgcov.1

------------------------------------------------------------------------

cat /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/man/man1/gnatcpp.1 | less

...........................

....cpp &#92;- The C Preprocessor

.SH "SYNOPSIS"

.IX Header "SYNOPSIS"

cpp [&#92;fB&#92;-D&#92;fR&#92;fImacro&#92;fR[=&#92;fIdefn&#92;fR]...] [&#92;fB&#92;-U&#92;fR&#92;fImacro&#92;fR]

[&#92;fB&#92;-I&#92;fR&#92;fIdir&#92;fR...] [&#92;fB&#92;-W&#92;fR&#92;fIwarn&#92;fR...]

[&#92;fB&#92;-M&#92;fR|&#92;fB&#92;-MM&#92;fR] [&#92;fB&#92;-MG&#92;fR] [&#92;fB&#92;-MF&#92;fR &#92;fIfilename&#92;fR]

[&#92;fB&#92;-MP&#92;fR] [&#92;fB&#92;-MQ&#92;fR &#92;fItarget&#92;fR...]

[&#92;fB&#92;-MT&#92;fR &#92;fItarget&#92;fR...]

[&#92;fB&#92;-P&#92;fR] [&#92;fB&#92;-fno&#92;-working&#92;-directory&#92;fR]

[&#92;fB&#92;-x&#92;fR &#92;fIlanguage&#92;fR] [&#92;fB&#92;-std=&#92;fR&#92;fIstandard&#92;fR]

&#92;fIinfile&#92;fR &#92;fIoutfile&#92;fR

.PP

Only the most useful options are listed here; see below for the remainder.

.SH "DESCRIPTION"

.IX Header "DESCRIPTION"

The C preprocessor, often known as &#92;fIcpp&#92;fR, is a &#92;fImacro processor&#92;fR

that is used automatically by the C compiler to transform your program

before compilation. It is called a macro processor because it allows

you to define &#92;fImacros&#92;fR, which are brief abbreviations for longer

constructs.

.PP

The C preprocessor is intended to be used only with C, &#92;*(C+, and

Objective-C source code. In the past, it has been abused as a general

text processor. It will choke on input which does not obey C's lexical

rules. For example, apostrophes will be interpreted as the beginning of

character constants, and cause errors. Also, you cannot rely on it

preserving characteristics of the input which are not significant to

C&#92;-family....................

------------------------------------------------------------------------

то есть это man g++ на самом деле :)

------------------------------------------------------------------------

cat /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/man/man1/gnatgcc.1 | less

............................

IX Title "GCC 1"

.TH GCC 1 "2006-02-02" "gcc-3.4.5" "GNU"

.SH "NAME"

gcc &#92;- GNU project C and C++ compiler

.SH "SYNOPSIS"

.IX Header "SYNOPSIS"

gcc [&#92;fB&#92;-c&#92;fR|&#92;fB&#92;-S&#92;fR|&#92;fB&#92;-E&#92;fR] [&#92;fB&#92;-std=&#92;fR&#92;fIstandard&#92;fR]

[&#92;fB&#92;-g&#92;fR] [&#92;fB&#92;-pg&#92;fR] [&#92;fB&#92;-O&#92;fR&#92;fIlevel&#92;fR]

[&#92;fB&#92;-W&#92;fR&#92;fIwarn&#92;fR...] [&#92;fB&#92;-pedantic&#92;fR]

[&#92;fB&#92;-I&#92;fR&#92;fIdir&#92;fR...] [&#92;fB&#92;-L&#92;fR&#92;fIdir&#92;fR...]

[&#92;fB&#92;-D&#92;fR&#92;fImacro&#92;fR[=&#92;fIdefn&#92;fR]...] [&#92;fB&#92;-U&#92;fR&#92;fImacro&#92;fR]

[&#92;fB&#92;-f&#92;fR&#92;fIoption&#92;fR...] [&#92;fB&#92;-m&#92;fR&#92;fImachine-option&#92;fR...]

[&#92;fB&#92;-o&#92;fR &#92;fIoutfile&#92;fR] &#92;fIinfile&#92;fR...

.PP

Only the most useful options are listed here; see below for the

remainder. &#92;fBg++&#92;fR accepts mostly the same options as &#92;fBgcc&#92;fR.

.SH "DESCRIPTION"

.IX Header "DESCRIPTION"

When you invoke &#92;s-1GCC&#92;s0, it normally does preprocessing, compilation,

assembly and linking. The ``overall options'' allow you to stop this

process at an intermediate stage. For example, the &#92;fB&#92;-c&#92;fR option

says not to run the linker. Then the output consists of object files

output by the assembler.

------------------------------------------------------------------------

а это man gcc на самом деле :)

------------------------------------------------------------------------

cat /usr/share/gnat-gpl-data/i686-pc-linux-gnu/3.4/man/man1/gnatgcov.1 | less

............................

IX Title "GCOV 1"

.TH GCOV 1 "2005-12-01" "gcc-3.4.5" "GNU"

.SH "NAME"

gcov &#92;- coverage testing tool

.SH "SYNOPSIS"

.IX Header "SYNOPSIS"

gcov [&#92;fB&#92;-v&#92;fR|&#92;fB&#92;-&#92;-version&#92;fR] [&#92;fB&#92;-h&#92;fR|&#92;fB&#92;-&#92;-help&#92;fR]

[&#92;fB&#92;-a&#92;fR|&#92;fB&#92;-&#92;-all&#92;-blocks&#92;fR]

[&#92;fB&#92;-b&#92;fR|&#92;fB&#92;-&#92;-branch&#92;-probabilities&#92;fR]

[&#92;fB&#92;-c&#92;fR|&#92;fB&#92;-&#92;-branch&#92;-counts&#92;fR]

[&#92;fB&#92;-n&#92;fR|&#92;fB&#92;-&#92;-no&#92;-output&#92;fR]

[&#92;fB&#92;-l&#92;fR|&#92;fB&#92;-&#92;-long&#92;-file&#92;-names&#92;fR]

[&#92;fB&#92;-p&#92;fR|&#92;fB&#92;-&#92;-preserve&#92;-paths&#92;fR]

[&#92;fB&#92;-f&#92;fR|&#92;fB&#92;-&#92;-function&#92;-summaries&#92;fR]

[&#92;fB&#92;-o&#92;fR|&#92;fB&#92;-&#92;-object&#92;-directory&#92;fR &#92;fIdirectory|file&#92;fR] &#92;fIsourcefile&#92;fR

[&#92;fB&#92;-u&#92;fR|&#92;fB&#92;-&#92;-unconditional&#92;-branches&#92;fR]

.SH "DESCRIPTION"

.IX Header "DESCRIPTION"

&#92;&&#92;fBgcov&#92;fR is a test coverage program. Use it in concert with &#92;s-1GCC&#92;s0

to analyze your programs to help create more efficient, faster running

code and to discover untested parts of your program.

------------------------------------------------------------------------

ну, а это, как и следовало ожидать, man gcov :)

------------------------------------------------------------------------

 

От gnat-а, здесь только одни названия :)

 

Помимо этого можно читать исходники (если вдруг нехватает подробностей по библиотекам например. Все *.ads для Gnat.* пакетов должны быть установленны)..

 

Это само-собой разумеется. Open Source всё-таки :) Исходники я даже на C++ читаю (по нескольку раз на день) :) .

 

Алексей

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти