400 lines
18 KiB
XML
400 lines
18 KiB
XML
<?xml version="1.0" encoding="iso-8859-7"?>
|
||
<!--
|
||
|
||
Το Εγχειρίδιο του FreeBSD: DTrace
|
||
|
||
The FreeBSD Greek Documentation Project
|
||
|
||
$FreeBSD$
|
||
|
||
%SOURCE% en_US.ISO8859-1/books/handbook/dtrace/chapter.xml
|
||
%SRCID% 38826
|
||
|
||
-->
|
||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="dtrace">
|
||
<info><title>&dtrace;</title>
|
||
<authorgroup>
|
||
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Γράφηκε από τον </contrib></author>
|
||
</authorgroup>
|
||
</info>
|
||
|
||
|
||
|
||
<sect1 xml:id="dtrace-synopsis">
|
||
<title>Σύνοψη</title>
|
||
|
||
<indexterm><primary>&dtrace;</primary></indexterm>
|
||
<indexterm>
|
||
<primary>&dtrace; support</primary>
|
||
<see>&dtrace;</see>
|
||
</indexterm>
|
||
|
||
<para>Το &dtrace;, γνωστό επίσης ως Dynamic Tracing, είναι ένα εργαλείο το
|
||
οποίο αναπτύχθηκε από την &sun; για τον εντοπισμό προβλημάτων απόδοσης
|
||
σε συστήματα που πρόκειται να χρησιμοποιηθούν ή χρησιμοποιούνται ήδη
|
||
στην παραγωγή. Δεν πρόκειται για εργαλείο αποσφαλμάτωσης, αλλά για
|
||
εργαλείο ανάλυσης πραγματικού χρόνου, με το οποίο μπορούν να
|
||
εντοπιστούν προβλήματα απόδοσης και άλλες καταστάσεις.</para>
|
||
|
||
<para>Το &dtrace; είναι ένα θαυμάσιο εργαλείο profiling και διαθέτει
|
||
εντυπωσιακό πλήθος χαρακτηριστικών για την διάγνωση προβλημάτων του
|
||
συστήματος. Μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει από πριν
|
||
έτοιμα scripts, με τα οποία μπορείτε να εκμεταλλευθείτε καλύτερα τις
|
||
δυνατότητες του. Οι χρήστες μπορούν ακόμα να γράψουν και τα δικά τους
|
||
βοηθητικά προγράμματα, χρησιμοποιώντας την Γλώσσα D που παρέχει το
|
||
&dtrace;, και να προσαρμόσουν με αυτό τον τρόπο το profiling στις δικές
|
||
τους ανάγκες.</para>
|
||
|
||
<para>Αφού διαβάσετε αυτό το κεφάλαιο, θα γνωρίζετε:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Τι είναι το &dtrace; και τι δυνατότητες παρέχει.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Τις διαφορές υλοποίησης μεταξύ του &dtrace; του &solaris; και
|
||
του &os;.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Πως να ενεργοποιήσετε και να χρησιμοποιήσετε το &dtrace;
|
||
στο &os;.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Να κατανοείτε βασικές έννοιες του &unix; και του &os;
|
||
(<xref linkend="basics"/>).</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Να είστε εξοικειωμένος με τις βασικές διαδικασίες ρύθμισης και
|
||
μεταγλώττισης προσαρμοσμένου πυρήνα
|
||
(<xref linkend="kernelconfig"/>).</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Να είστε εξοικειωμένος με την ασφάλεια και τον τρόπο που αυτή
|
||
σχετίζεται με το &os; (<xref linkend="security"/>).</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Να κατανοείτε πως μπορείτε να ανακτήσετε τον πηγαίο κώδικα του
|
||
&os; και να τον χρησιμοποιήσετε ώστε να επαναμεταγλωττίσετε το
|
||
σύστημα σας (<xref linkend="updating-upgrading"/>).</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<!--
|
||
Temporary warning to avoid listing experimental versions
|
||
and production versions of FreeBSD with this technology.
|
||
-->
|
||
<warning>
|
||
<para>Τη δεδομένη στιγμή, το &dtrace; θεωρείται ότι είναι σε πειραματικό
|
||
στάδιο. Ορισμένες επιλογές μπορεί να υπολείπονται σε λειτουργικότητα,
|
||
και κάποια τμήματα ίσως να μη λειτουργούν καθόλου. Με την πάροδο του
|
||
χρόνου, οι παραπάνω δυνατότητες θα θεωρηθούν έτοιμες για χρήση σε
|
||
μηχανήματα παραγωγής, και η παρούσα τεκμηρίωση θα ανανεωθεί ώστε να
|
||
αντιπροσωπεύει αυτή την κατάσταση.</para>
|
||
</warning>
|
||
</sect1>
|
||
|
||
<sect1 xml:id="dtrace-implementation">
|
||
<title>Διαφορές στην Υλοποίηση</title>
|
||
|
||
<para>Αν και το &dtrace; στο &os; είναι αρκετά όμοιο με αυτό του &solaris;,
|
||
υπάρχουν κάποιες διαφορές που θα πρέπει να τις εξηγήσουμε πριν
|
||
συνεχίσουμε. Η μεγαλύτερη διαφορά που θα παρατηρήσουν οι χρήστες,
|
||
είναι ότι στο &os; το &dtrace; πρέπει να ενεργοποιηθεί χειροκίνητα.
|
||
Υπάρχουν διάφορες επιλογές και αρθρώματα για τον πυρήνα που πρέπει να
|
||
ενεργοποιηθούν ώστε το &dtrace; να λειτουργεί σωστά. Θα εξηγήσουμε
|
||
αργότερα αυτές τις ρυθμίσεις.</para>
|
||
|
||
<para>Η επιλογή <literal>DDB_CTF</literal> του πυρήνα χρησιμοποιείται για
|
||
να ενεργοποιήσει την υποστήριξη φορτώματος των δεδομένων
|
||
<acronym>CTF</acronym> από τον πυρήνα και τα αρθρώματα του. Το
|
||
<acronym>CTF</acronym> είναι το Compact C Type format του &solaris;,
|
||
το οποίο ενθυλακώνει μια ελαττωμένη μορφή πληροφοριών αποσφαλμάτωσης
|
||
(debugging), όμοια με το <acronym>DWARF</acronym> και τα
|
||
stabs. Αυτά τα δεδομένα <acronym>CTF</acronym> προστίθενται στα
|
||
εκτελέσιμα μέσω των εργαλείων <command>ctfconvert</command> και
|
||
<command>ctfmerge</command>. Το βοηθητικό πρόγραμμα
|
||
<command>ctfconvert</command> ερμηνεύει τα τμήματα των
|
||
<acronym>DWARF</acronym> <acronym>ELF</acronym> που περιέχουν
|
||
πληροφορίες debug (δημιουργούνται από το μεταγλωττιστή), και
|
||
το <command>ctfmerge</command> συγχωνεύει τα
|
||
τμήματα <acronym>CTF</acronym> και <acronym>ELF</acronym> από τα
|
||
αντικείμενα σε άλλα εκτελέσιμα ή κοινόχρηστες βιβλιοθήκες.
|
||
Περισσότερες πληροφορίες για την ενεργοποίηση των παραπάνω στη
|
||
μεταγλώττιση του πυρήνα και του συστήματος του &os;, θα δούμε
|
||
παρακάτω.</para>
|
||
|
||
<para>Στο &os; κάποιοι παροχείς είναι διαφορετικοί σε σχέση με το
|
||
&solaris;. Ο πιο αξιοσημείωτος είναι ο παροχέας
|
||
<literal>dtmalloc</literal> ο οποίος επιτρέπει το tracing του
|
||
<function>malloc()</function> ανάλογα με τον τύπο του, στον πυρήνα του
|
||
&os;.</para>
|
||
|
||
<para>Μόνο ο <systemitem class="username">root</systemitem> μπορεί να χρησιμοποιήσει το
|
||
&dtrace; στο &os;. Αυτό σχετίζεται με διαφορές στην ασφάλεια, καθώς το
|
||
&solaris; διαθέτει κάποιους ελέγχους ασφάλειας χαμηλού επιπέδου, οι
|
||
οποίοι δεν υπάρχουν ακόμα στο &os;. Για το λόγο αυτό, η χρήση της
|
||
συσκευής <filename>/dev/dtrace/dtrace</filename> απαγορεύεται
|
||
αυστηρά για όλους τους χρήστες εκτός από τον
|
||
<systemitem class="username">root</systemitem>.</para>
|
||
|
||
<para>Τέλος, το λογισμικό &dtrace; βρίσκεται υπό την άδεια
|
||
<acronym>CDDL</acronym> της &sun;. Μπορείτε να διαβάσετε το κείμενο
|
||
της άδειας <literal>Common Development and Distribution
|
||
License</literal> στο &os;, στο αρχείο
|
||
<filename>/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE</filename>
|
||
ή να το διαβάσετε online στη διεύθυνση
|
||
<link xlink:href="http://www.opensolaris.org/os/licensing">http://www.opensolaris.org/os/licensing</link>.</para>
|
||
|
||
<para>Η άδεια ουσιαστικά σημαίνει ότι ένας πυρήνας &os; με τις επιλογές
|
||
του &dtrace;, εξακολουθεί να βρίσκεται υπό την άδεια
|
||
<acronym>BSD</acronym>. Ωστόσο το <acronym>CDDL</acronym> εμπλέκεται
|
||
τη στιγμή που γίνεται διανομή των αρθρωμάτων σε δυαδική μορφή, ή τη
|
||
στιγμή που φορτώνονται.</para>
|
||
</sect1>
|
||
|
||
<sect1 xml:id="dtrace-enable">
|
||
<title>Ενεργοποίηση της Υποστήριξης &dtrace;</title>
|
||
|
||
<para>Για να ενεργοποιήσετε την υποστήριξη για το &dtrace;, προσθέστε τις
|
||
ακόλουθες γραμμές στο αρχείο ρυθμίσεων του πυρήνα:</para>
|
||
|
||
<programlisting>options KDTRACE_HOOKS
|
||
options DDB_CTF</programlisting>
|
||
|
||
<note>
|
||
<para>Οι χρήστες της αρχιτεκτονικής AMD64 θα θέλουν να προσθέσουν την
|
||
ακόλουθη γραμμή στο αρχείο ρυθμίσεων του πυρήνα τους:</para>
|
||
|
||
<programlisting>options KDTRACE_FRAME</programlisting>
|
||
|
||
<para>Η επιλογή αυτή παρέχει υποστήριξη για τη λειτουργία
|
||
<acronym>FBT</acronym>. Το &dtrace; μπορεί να λειτουργήσει και χωρίς
|
||
αυτήν. Ωστόσο, θα παρέχει περιορισμένη υποστήριξη για
|
||
function boundary tracing.</para>
|
||
</note>
|
||
|
||
<para>Όλος ο πηγαίος κώδικας θα πρέπει να μεταγλωττιστεί ξανά με τις
|
||
επιλογές <acronym>CTF</acronym>. Για να γίνει αυτό, μεταγλωττίστε
|
||
ξανά το &os; χρησιμοποιώντας:</para>
|
||
|
||
<!-- XXXTR: WITH_CTF has been reported to leave a user with a
|
||
broken system when used with buildworld. Until this is
|
||
fixed, comment out those parts. When uncommenting, kill
|
||
the extra screen.
|
||
-->
|
||
|
||
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
|
||
<!-- &prompt.root; <userinput>make WITH_CTF=1 buildworld</userinput>-->
|
||
&prompt.root; <userinput>make WITH_CTF=1 kernel</userinput></screen>
|
||
<!-- &prompt.root; <userinput>make WITH_CTF=1 installworld</userinput>
|
||
&prompt.root; <userinput>mergemaster -Ui</userinput></screen> -->
|
||
|
||
<para>Θα χρειαστεί να επανεκκινήσετε το σύστημα.</para>
|
||
|
||
<para>Μετά την επανεκκίνηση, και με τον νέο πυρήνα φορτωμένο πλέον στη
|
||
μνήμη, θα πρέπει να προσθέσετε υποστήριξη για το κέλυφος Korn. Αυτό
|
||
απαιτείται, καθώς τα εργαλεία &dtrace; περιλαμβάνουν διάφορα βοηθητικά
|
||
προγράμματα τα οποία είναι γραμμένα σε
|
||
<command>ksh</command>. Εγκαταστήστε το port
|
||
<package>shells/ksh93</package>. Μπορείτε επίσης να
|
||
εκτελέσετε αυτά τα εργαλεία και μέσω του
|
||
<package>shells/pdksh</package> ή του
|
||
<package>shells/mksh</package>.</para>
|
||
|
||
<para>Τέλος, ανακτήστε την τρέχουσα σειρά εργαλείων &dtrace;. Η τελευταία
|
||
έκδοση διατίθεται στην τοποθεσία
|
||
<uri xlink:href="http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/">http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/</uri>.
|
||
Διατίθεται και πρόγραμμα εγκατάστασης, το οποίο δεν είναι ωστόσο
|
||
απαραίτητο να εκτελέσετε προκειμένου να χρησιμοποιήσετε τα
|
||
εργαλεία.</para>
|
||
</sect1>
|
||
|
||
<sect1 xml:id="dtrace-using">
|
||
<title>Χρησιμοποιώντας το &dtrace;</title>
|
||
|
||
<para>Πριν χρησιμοποιήσετε τις λειτουργίες του &dtrace;, θα πρέπει να
|
||
υπάρχει η αντίστοιχη συσκευή. Για να φορτώσετε τη συσκευή, θα πρέπει
|
||
να δώσετε την παρακάτω εντολή:</para>
|
||
|
||
<screen>&prompt.root; <userinput>kldload dtraceall</userinput></screen>
|
||
|
||
<para>Θα πρέπει να έχετε πλέον υποστήριξη &dtrace;. Για να δείτε όλα τα
|
||
probes, θα πρέπει να εκτελέσετε ως διαχειριστής την παρακάτω
|
||
εντολή:</para>
|
||
|
||
<screen>&prompt.root; <userinput>dtrace -l | more</userinput></screen>
|
||
|
||
<para>Όλη η έξοδος περνάει μέσω του βοηθητικού προγράμματος
|
||
<command>more</command>, διαφορετικά γρήγορα θα υπερχείλιζε την
|
||
προσωρινή μνήμη της οθόνης. Στο σημείο αυτό, θα πρέπει να θεωρηθεί ότι
|
||
το &dtrace; λειτουργεί. Είναι πλέον ώρα να εξετάσουμε αυτή τη σειρά
|
||
εργαλείων.</para>
|
||
|
||
<para>Η σειρά των εργαλείων είναι μια συλλογή από έτοιμα scripts που
|
||
εκτελούνται με το &dtrace; ώστε να συλλέξουν πληροφορίες σχετικά με το
|
||
σύστημα. Υπάρχουν scripts που ελέγχουν για ανοικτά αρχεία, τη μνήμη,
|
||
τη χρήση της <acronym>CPU</acronym> και πολλά ακόμα. Κάντε εξαγωγή των
|
||
scripts με την ακόλουθη εντολή:</para>
|
||
|
||
<screen>&prompt.root; <userinput>gunzip -c DTraceToolkit* | tar xvf -</userinput></screen>
|
||
|
||
<para>Μετακινηθείτε στον κατάλογο που τα αποσυμπιέσατε με την εντολή
|
||
<command>cd</command> και αλλάξτε τα δικαιώματα εκτέλεσης σε όλα τα
|
||
αρχεία, όπως στα αρχεία με τα μικρά γράμματα, σε
|
||
<literal>755</literal>.</para>
|
||
|
||
<para>Θα χρειαστεί να γίνουν αλλαγές στο περιεχόμενο σε όλα τα scripts.
|
||
Όσα περιέχουν το
|
||
<filename>/usr/bin/ksh</filename> θα πρέπει να αλλαχθούν σε
|
||
<filename>/usr/local/bin/ksh</filename>, τα άλλα που περιέχουν το
|
||
<filename>/usr/bin/sh</filename> θα πρέπει να αλλαχθούν σε
|
||
<filename>/bin/sh</filename>, και τέλος αυτά που περιέχουν το
|
||
<filename>/usr/bin/perl</filename> θα πρέπει να αλλαχθούν σε
|
||
<filename>/usr/local/bin/perl</filename>.</para>
|
||
|
||
<important>
|
||
<para>Στο σημείο αυτό είναι σημαντικό να υπενθυμίσουμε στον αναγνώστη
|
||
ότι η υποστήριξη &dtrace; στο &os; είναι <emphasis>ατελής</emphasis>
|
||
και πειραματική. Πολλά από αυτά τα scripts δεν θα λειτουργήσουν,
|
||
καθώς είναι είτε πολύ προσανατολισμένα στο &solaris;, ή χρησιμοποιούν
|
||
probes τα οποία δεν υποστηρίζονται τη δεδομένη στιγμή.</para>
|
||
</important>
|
||
|
||
<para>Τη στιγμή που γράφονται αυτές οι γραμμές, μόνο δύο scripts από τη
|
||
σειρά εργαλείων του &dtrace; υποστηρίζονται πλήρως στο &os;: το
|
||
<filename>hotkernel</filename> και το <filename>procsystime</filename>.
|
||
Αυτά τα δύο θα εξερευνήσουμε στα επόμενα τμήματα αυτής της
|
||
ενότητας.</para>
|
||
|
||
<para>Το <filename>hotkernel</filename> έχει σχεδιαστεί να αναγνωρίζει
|
||
ποια συνάρτηση καταναλώνει το μεγαλύτερο χρόνο στον πυρήνα. Εκτελώντας
|
||
το υπό κανονικές συνθήκες, θα δείτε έξοδο παρόμοια με την
|
||
παρακάτω:</para>
|
||
|
||
<screen>&prompt.root; <userinput>./hotkernel</userinput>
|
||
Sampling... Hit Ctrl-C to end.</screen>
|
||
|
||
<para>Ο διαχειριστής του συστήματος θα πρέπει να χρησιμοποιήσει το
|
||
συνδυασμό πλήκτρων <keycombo action="simul"><keycap>Ctrl</keycap><keycap>C</keycap></keycombo> για
|
||
να σταματήσει τη διεργασία. Με τον τερματισμό του, το script θα
|
||
απεικονίσει μια σειρά από συναρτήσεις του πυρήνα και πληροφορίες σχετικά
|
||
με το χρόνο τους, ταξινομώντας τις σε αύξουσα σειρά ανάλογα με το
|
||
χρόνο:</para>
|
||
|
||
<screen>kernel`_thread_lock_flags 2 0.0%
|
||
0xc1097063 2 0.0%
|
||
kernel`sched_userret 2 0.0%
|
||
kernel`kern_select 2 0.0%
|
||
kernel`generic_copyin 3 0.0%
|
||
kernel`_mtx_assert 3 0.0%
|
||
kernel`vm_fault 3 0.0%
|
||
kernel`sopoll_generic 3 0.0%
|
||
kernel`fixup_filename 4 0.0%
|
||
kernel`_isitmyx 4 0.0%
|
||
kernel`find_instance 4 0.0%
|
||
kernel`_mtx_unlock_flags 5 0.0%
|
||
kernel`syscall 5 0.0%
|
||
kernel`DELAY 5 0.0%
|
||
0xc108a253 6 0.0%
|
||
kernel`witness_lock 7 0.0%
|
||
kernel`read_aux_data_no_wait 7 0.0%
|
||
kernel`Xint0x80_syscall 7 0.0%
|
||
kernel`witness_checkorder 7 0.0%
|
||
kernel`sse2_pagezero 8 0.0%
|
||
kernel`strncmp 9 0.0%
|
||
kernel`spinlock_exit 10 0.0%
|
||
kernel`_mtx_lock_flags 11 0.0%
|
||
kernel`witness_unlock 15 0.0%
|
||
kernel`sched_idletd 137 0.3%
|
||
0xc10981a5 42139 99.3%</screen>
|
||
|
||
<!-- XXXTR: I attempted to use objdump and nm on /boot/kernel/kernel
|
||
to find 0xc10981a5, but to no avail. It would be nice to know
|
||
how we should look that up. -->
|
||
|
||
<para>Το script αυτό λειτουργεί επίσης με αρθρώματα του πυρήνα. Για να
|
||
χρησιμοποιήσετε αυτό το χαρακτηριστικό, εκτελέστε το με την επιλογή
|
||
<option>-m</option>:</para>
|
||
|
||
<screen>&prompt.root; <userinput>./hotkernel -m</userinput>
|
||
Sampling... Hit Ctrl-C to end.
|
||
^C
|
||
MODULE COUNT PCNT
|
||
0xc107882e 1 0.0%
|
||
0xc10e6aa4 1 0.0%
|
||
0xc1076983 1 0.0%
|
||
0xc109708a 1 0.0%
|
||
0xc1075a5d 1 0.0%
|
||
0xc1077325 1 0.0%
|
||
0xc108a245 1 0.0%
|
||
0xc107730d 1 0.0%
|
||
0xc1097063 2 0.0%
|
||
0xc108a253 73 0.0%
|
||
kernel 874 0.4%
|
||
0xc10981a5 213781 99.6%</screen>
|
||
|
||
<!-- XXXTR: I was unable to match these up with output from
|
||
kldstat and kldstat -v and grep. Maybe I'm missing something
|
||
seriously obvious. It is 5AM btw. -->
|
||
|
||
<para>Το <filename>procsystime</filename> script συλλαμβάνει και τυπώνει
|
||
τον χρόνο των κλήσεων συστήματος για μια συγκεκριμένη διεργασία μέσω
|
||
του <acronym>PID</acronym> ή του ονόματος της. Στο παρακάτω παράδειγμα
|
||
έχουμε ξεκινήσει μια νέα διεργασία του <filename>/bin/csh</filename>.
|
||
Εκτελέσαμε το <filename>procsystime</filename> και το αφήσαμε στην
|
||
αναμονή καθώς γράφαμε μερικές εντολές στο <command>csh</command> που
|
||
είχαμε ανοίξει. Αυτά είναι τα αποτελέσματα της δοκιμής μας:</para>
|
||
|
||
<screen>&prompt.root; <userinput>./procsystime -n csh</userinput>
|
||
Tracing... Hit Ctrl-C to end...
|
||
^C
|
||
|
||
Elapsed Times for processes csh,
|
||
|
||
SYSCALL TIME (ns)
|
||
getpid 6131
|
||
sigreturn 8121
|
||
close 19127
|
||
fcntl 19959
|
||
dup 26955
|
||
setpgid 28070
|
||
stat 31899
|
||
setitimer 40938
|
||
wait4 62717
|
||
sigaction 67372
|
||
sigprocmask 119091
|
||
gettimeofday 183710
|
||
write 263242
|
||
execve 492547
|
||
ioctl 770073
|
||
vfork 3258923
|
||
sigsuspend 6985124
|
||
read 3988049784</screen>
|
||
|
||
<para>Όπως φαίνεται, η κλήση του συστήματος για ανάγνωση
|
||
(<function>read()</function>) είναι αυτή που καταναλώνει τον
|
||
περισσότερο χρόνο σε νανοδευτερόλεπτα, ενώ το λιγότερο τον καταναλώνει
|
||
η κλήση συστήματος <function>getpid()</function>.</para>
|
||
</sect1>
|
||
|
||
<sect1 xml:id="dtrace-language">
|
||
<title>Η Γλώσσα D</title>
|
||
|
||
<para>Η σειρά εργαλείων &dtrace;, περιλαμβάνει αρκετά scripts γραμμένα στην
|
||
ειδική γλώσσα του &dtrace;. Η γλώσσα αυτή ονομάζεται
|
||
<quote>η γλώσσα D</quote> στην τεκμηρίωση της &sun;, και είναι αρκετά
|
||
όμοια με τη C++. Αναλυτική περιγραφή αυτής της γλώσσας είναι πέρα από
|
||
τους σκοπούς αυτού του κειμένου. Υπάρχει ενεργή συζήτηση σχετικά με
|
||
αυτή, στη διεύθυνση <uri xlink:href="http://wikis.sun.com/display/DTrace/Documentation">http://wikis.sun.com/display/DTrace/Documentation</uri>.</para>
|
||
</sect1>
|
||
</chapter>
|