continue work on manual
[ust.git] / doc / manual.lyx
CommitLineData
3f05bdbd 1#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
a8afdd3c
PMF
2\lyxformat 345
3\begin_document
4\begin_header
5\textclass article
6\use_default_options true
7\language english
8\inputencoding auto
9\font_roman default
10\font_sans default
11\font_typewriter default
12\font_default_family default
13\font_sc false
14\font_osf false
15\font_sf_scale 100
16\font_tt_scale 100
17
18\graphics default
19\paperfontsize default
20\use_hyperref false
21\papersize default
22\use_geometry false
23\use_amsmath 1
24\use_esint 1
25\cite_engine basic
26\use_bibtopic false
27\paperorientation portrait
28\secnumdepth 3
29\tocdepth 3
30\paragraph_separation indent
31\defskip medskip
32\quotes_language english
33\papercolumns 1
34\papersides 1
35\paperpagestyle default
36\tracking_changes false
37\output_changes false
38\author ""
0ce2af7f 39\author ""
a8afdd3c
PMF
40\end_header
41
42\begin_body
43
44\begin_layout Title
45LTTng Userspace Tracer Manual
46\end_layout
47
48\begin_layout Author
49Pierre-Marc Fournier
50\end_layout
51
52\begin_layout Section
53What is the LTTng Userspace Tracer?
54\end_layout
55
56\begin_layout Subsection
57Overview
58\end_layout
59
0ce2af7f
PMF
60\begin_layout Standard
61The LTTng Userspace Tracer (UST) is a tracing system for userspace applications.
62 It is designed to trace efficiently applications that produce events at
63 a very high rate.
64 UST is derived from LTTng, a tracer for the Linux kernel.
65 It has the same trace format.
66\end_layout
67
68\begin_layout Standard
69Users may choose at runtime and even at trace time what instrumentation
70 should be activated.
71 Custom probes may be used to trace events conditionally.
72\end_layout
73
a8afdd3c
PMF
74\begin_layout Subsection
75Features
76\end_layout
77
78\begin_layout Itemize
79Arbitrary number of channels
80\end_layout
81
82\begin_layout Itemize
83One buffer per process (multiple threads share the same buffer)
84\end_layout
85
86\begin_layout Itemize
7c2343de 87Early process tracing (from the beginning of the main() function)
a8afdd3c
PMF
88\end_layout
89
0ce2af7f
PMF
90\begin_layout Itemize
91Support for custom probes
92\end_layout
93
a8afdd3c
PMF
94\begin_layout Standard
95Still to implement:
96\end_layout
97
0ce2af7f 98\begin_layout Itemize
7c2343de
PMF
99Support for dynamic instrumentation
100\end_layout
101
102\begin_layout Itemize
103Per thread or per CPU buffers
0ce2af7f
PMF
104\end_layout
105
106\begin_layout Standard
107Complementary systems:
108\end_layout
109
110\begin_layout Itemize
111A extension to gdb tracepoints that will allow the tracing of applications
112 with dynamic instrumentation is under development.
113\end_layout
114
a8afdd3c
PMF
115\begin_layout Subsection
116Performance
117\end_layout
118
7c2343de
PMF
119\begin_layout Section
120Installation
121\end_layout
122
3f05bdbd
PMF
123\begin_layout Subsection
124Obtain the code
125\end_layout
126
127\begin_layout Standard
128To compile UST, you need:
129\end_layout
130
131\begin_layout Itemize
132the UST code
133\end_layout
134
135\begin_layout Itemize
136libkcompat
137\end_layout
138
139\begin_layout Itemize
140liburcu-pmf
141\end_layout
142
143\begin_layout Subsection
144Configure libkcompat
145\end_layout
146
147\begin_layout Standard
148Edit kcompat.h and uncomment the architecture of the target system.
149\end_layout
150
151\begin_layout Subsection
152Configure libust
153\end_layout
154
155\begin_layout Standard
156If the code was obtained through git, first generate a Makefile by running
157 autogen.sh.
158\end_layout
159
160\begin_layout Standard
161Then, run ./configure, specifying the directories of liburcu and libkcompat.
162 Example:
163\end_layout
164
165\begin_layout Standard
166\begin_inset listings
167inline false
168status open
169
170\begin_layout Plain Layout
171
172./configure --with-urcu=/home/pmf/liburcu-pmf --with-kcompat=/home/pmf/libkcompat
173\end_layout
174
175\end_inset
176
177
178\end_layout
179
180\begin_layout Subsection
181Build liburcu
182\end_layout
183
184\begin_layout Standard
185Go to the liburcu directory and run:
186\end_layout
187
188\begin_layout Standard
189\begin_inset listings
190inline false
191status open
192
193\begin_layout Plain Layout
194
195make
196\end_layout
197
198\end_inset
199
200
201\end_layout
202
203\begin_layout Subsection
204Build ust
205\end_layout
206
207\begin_layout Standard
208Go to the ust directory and run:
209\end_layout
210
211\begin_layout Standard
212\begin_inset listings
213inline false
214status open
215
216\begin_layout Plain Layout
217
218make
219\end_layout
220
221\end_inset
222
223
224\end_layout
225
a8afdd3c
PMF
226\begin_layout Section
227Instrumenting an Application
228\end_layout
229
230\begin_layout Standard
231In order to record a trace of events occurring in a application, the application
232 must be instrumented.
0ce2af7f
PMF
233 Instrumentation points resemble function calls.
234 When the program reaches an instrumentation point, an event is generated.
a8afdd3c
PMF
235\end_layout
236
237\begin_layout Standard
238There are no limitations on the type of code that may be instrumented.
239 Multi-threaded programs may be instrumented without problem.
7c2343de 240 Signal handlers may be instrumented as well.
a8afdd3c
PMF
241\end_layout
242
243\begin_layout Standard
244There are two APIs to instrument programs: markers and tracepoints.
245 Markers are quick to add and are usually used for temporary instrumentation.
246 Tracepoints provide a way to instrument code more cleanly and are suited
247 for permanent instrumentation.
248\end_layout
249
250\begin_layout Subsection
251Markers
252\end_layout
253
0ce2af7f
PMF
254\begin_layout Standard
255Markers were ported from the Linux Kernel Markers implementation.
256 Therefore, their usage is almost identical.
257\end_layout
258
a8afdd3c
PMF
259\begin_layout Subsubsection
260Inserting Markers
261\end_layout
262
263\begin_layout Standard
264Adding a marker is simply a matter of insert one line in the program.
265\end_layout
266
267\begin_layout Standard
268\begin_inset listings
269inline false
270status open
271
272\begin_layout Plain Layout
273
274#include <marker.h>
275\end_layout
276
277\begin_layout Plain Layout
278
7c2343de 279int main(int argc, char **argv)
a8afdd3c
PMF
280\end_layout
281
282\begin_layout Plain Layout
283
284{
285\end_layout
286
287\begin_layout Plain Layout
288
289 int v;
290\end_layout
291
292\begin_layout Plain Layout
293
294 char *st;
295\end_layout
296
297\begin_layout Plain Layout
298
299\end_layout
300
301\begin_layout Plain Layout
302
303 /* ...
304 set values of v and st ...
305 */
306\end_layout
307
308\begin_layout Plain Layout
309
310\end_layout
311
312\begin_layout Plain Layout
313
314 /* a marker: */
315\end_layout
316
317\begin_layout Plain Layout
318
319 trace_mark(main, myevent,
320\begin_inset Quotes eld
321\end_inset
322
323firstarg %d secondarg %s
324\begin_inset Quotes erd
325\end_inset
326
327, v, st);
328\end_layout
329
330\begin_layout Plain Layout
331
332\end_layout
333
334\begin_layout Plain Layout
335
336 /* a marker without arguments: */
337\end_layout
338
339\begin_layout Plain Layout
340
341 trace_mark(main, myotherevent, MARK_NOARGS);
342\end_layout
343
344\begin_layout Plain Layout
345
7c2343de
PMF
346\end_layout
347
348\begin_layout Plain Layout
3f05bdbd
PMF
349
350 return 0;
7c2343de
PMF
351\end_layout
352
353\begin_layout Plain Layout
354
a8afdd3c
PMF
355}
356\end_layout
357
358\end_inset
359
360
361\end_layout
362
363\begin_layout Standard
364The invocation of the trace_mark() macro requires at least 3 arguments.
365 The first, here
366\begin_inset Quotes eld
367\end_inset
368
369main
370\begin_inset Quotes erd
371\end_inset
372
373, is the name of the event category.
374 It is also the name of the channel the event will go in.
375 The second, here
376\begin_inset Quotes eld
377\end_inset
378
379myevent
380\begin_inset Quotes erd
381\end_inset
382
383 is the name of the event.
384 The third is a format string that announces the names and the types of
385 the event arguments.
386 Its format resembles that of a printf() format string; it is described
387 thoroughly in Appendix x.
388\end_layout
389
390\begin_layout Standard
391A given Marker may appear more than once in the same program.
392 Other Markers may have the same name and a different format string, although
393 this might induce some confusion at analysis time.
394\end_layout
395
396\begin_layout Subsubsection
397Registering the Markers
398\end_layout
399
400\begin_layout Standard
401In order to inform to register the Markers present in the module, a macro
402 must be inserted at global scope.
403 Only one such macro is needed per exacutable or per shared object.
404 Adding it more than once, however, is harmless.
405\end_layout
406
407\begin_layout Standard
408\begin_inset listings
409inline false
410status open
411
412\begin_layout Plain Layout
413
414MARKER_LIB;
415\end_layout
416
417\end_inset
418
419
420\end_layout
421
422\begin_layout Subsection
423Tracepoints
424\end_layout
425
426\begin_layout Standard
427The Tracepoints API uses the Markers, but provides a higher-level abstraction.
428 Whereas the markers API provides limited type checking, the Tracepoints
429 API provides more thorough type checking and discharges from the need to
430 insert format strings directly in the code and to have format strings appear
431 more than once if a given marker is reused.
432\end_layout
433
434\begin_layout Standard
435A tracepoint in the code looks like this:
436\end_layout
437
438\begin_layout Standard
439\begin_inset listings
440inline false
441status open
442
443\begin_layout Plain Layout
444
445#include <marker.h>
446\end_layout
447
448\begin_layout Plain Layout
449
450\end_layout
451
452\begin_layout Plain Layout
453
454void function()
455\end_layout
456
457\begin_layout Plain Layout
458
459{
460\end_layout
461
462\begin_layout Plain Layout
463
464 int v;
465\end_layout
466
467\begin_layout Plain Layout
468
469 char *st;
470\end_layout
471
472\begin_layout Plain Layout
473
474\end_layout
475
476\begin_layout Plain Layout
477
478 /* ...
479 set values of v and st ...
480 */
481\end_layout
482
483\begin_layout Plain Layout
484
485\end_layout
486
487\begin_layout Plain Layout
488
489 /* a tracepoint: */
490\end_layout
491
492\begin_layout Plain Layout
493
494 trace_main_myevent(v, st);
495\end_layout
496
497\begin_layout Plain Layout
498
499}
500\end_layout
501
502\end_inset
503
504
505\end_layout
506
507\begin_layout Standard
508\begin_inset listings
509inline false
510status open
511
512\begin_layout Plain Layout
513
514DEFINE_TRACE();
515\end_layout
516
517\end_inset
518
519
520\end_layout
521
522\begin_layout Standard
523\begin_inset listings
524inline false
525status open
526
527\begin_layout Plain Layout
528
529TRACEPOINT_LIB;
530\end_layout
531
532\end_inset
533
534
535\end_layout
536
537\begin_layout Subsection
538Compiling the Application
539\end_layout
540
7c2343de
PMF
541\begin_layout Standard
542See the
543\begin_inset Quotes eld
544\end_inset
545
546hello
547\begin_inset Quotes erd
548\end_inset
549
550 directory for an example application and makefile.
551\end_layout
552
553\begin_layout Itemize
554The compiler must have access to the include path for the libust headers.
555\end_layout
556
557\begin_layout Itemize
558The application should be statically or dynamically linked to libust.
559\end_layout
560
a8afdd3c
PMF
561\begin_layout Section
562Recording a Trace
563\end_layout
564
3f05bdbd
PMF
565\begin_layout Standard
566These preliminary steps need to be done before recording a trace.
567\end_layout
568
569\begin_layout Standard
570\begin_inset listings
571inline false
572status open
573
574\begin_layout Plain Layout
575
576Create the directory for the communication sockets.
577 Eventually this should be somewhere in /var.
578\end_layout
579
580\begin_layout Plain Layout
581
582$ mkdir /tmp/socks
583\end_layout
584
585\begin_layout Plain Layout
586
587\end_layout
588
589\begin_layout Plain Layout
590
591Create the directory where ustd will write the trace.
592 This will become configurable.
593\end_layout
594
595\begin_layout Plain Layout
596
597$ mkdir /tmp/trace
598\end_layout
599
600\begin_layout Plain Layout
601
602\end_layout
603
604\begin_layout Plain Layout
605
606Start the daemon
607\end_layout
608
609\begin_layout Plain Layout
610
611$ ustd
612\end_layout
613
614\end_inset
615
616
617\end_layout
618
a8afdd3c
PMF
619\begin_layout Subsection
620Basic Recording
621\end_layout
622
3f05bdbd
PMF
623\begin_layout Standard
624Tracing on a running program is controlled with the ust helper program.
625 Ust can start the tracing, stop the tracing, enable markers, disable markers
626 and list the markers.
627 Another program, ustd, is a daemon that collects the trace events and write
628 them to a file.
629\end_layout
630
631\begin_layout Standard
632In order to record a trace, the daemon must first be started with the following
633 command.
634\end_layout
635
636\begin_layout Standard
637\begin_inset listings
638inline false
639status open
640
641\begin_layout Plain Layout
642
643ustd
644\end_layout
645
646\end_inset
647
648
649\end_layout
650
651\begin_layout Standard
652Markers can be listed with the following command (for PID 1234).
653\end_layout
654
655\begin_layout Standard
656\begin_inset listings
657inline false
658status open
659
660\begin_layout Plain Layout
661
662ust --list-markers 1234
663\end_layout
664
665\end_inset
666
667
668\end_layout
669
670\begin_layout Standard
671A marker can be enabled with the following command (for PID 1234).
672\end_layout
673
674\begin_layout Standard
675\begin_inset listings
676inline false
677status open
678
679\begin_layout Plain Layout
680
681ust --enable-marker ust/mymark 1234
682\end_layout
683
684\end_inset
685
686
687\end_layout
688
689\begin_layout Standard
690Then, the trace can be started.
691\end_layout
692
693\begin_layout Standard
694\begin_inset listings
695inline false
696status open
697
698\begin_layout Plain Layout
699
700ust --start-trace 1234
701\end_layout
702
703\end_inset
704
705
706\end_layout
707
708\begin_layout Standard
709Eventually it can be stopped and destroyed.
710\end_layout
711
712\begin_layout Standard
713\begin_inset listings
714inline false
715status open
716
717\begin_layout Plain Layout
718
719ust --stop-trace 1234
720\end_layout
721
722\begin_layout Plain Layout
723
724ust --destroy-trace 1234
725\end_layout
726
727\end_inset
728
729
730\end_layout
731
a8afdd3c
PMF
732\begin_layout Subsection
733Early Tracing
734\end_layout
735
0ce2af7f
PMF
736\begin_layout Standard
737Sometimes, an application must be traced as soon as it is started.
738 In these cases, the Basic Recording method is not satisfactory, as important
739 events may be lost before the tracing is started.
740\end_layout
741
742\begin_layout Standard
743By using the Early Tracing method, it is guaranteed that the tracing is
744 started when the execution of the main() function of the program starts.
745\end_layout
746
747\begin_layout Standard
748Early Tracing may be enabled by defining the UST_TRACE environment variable
749 to a non-empty value when the program starts.
750 Additionally, the UST_AUTOPROBE may be set to a non-empty value to automaticall
751y connect all markers to the default probe.
752 For example:
753\end_layout
754
755\begin_layout Standard
756\begin_inset listings
757inline false
758status open
759
760\begin_layout Plain Layout
761
3f05bdbd
PMF
762# In another terminal, start the daemon.
763\end_layout
764
765\begin_layout Plain Layout
766
767ustd
768\end_layout
769
770\begin_layout Plain Layout
771
772\end_layout
773
774\begin_layout Plain Layout
775
776# Start
777\begin_inset Quotes eld
778\end_inset
779
780prog
781\begin_inset Quotes erd
782\end_inset
783
784 with early tracing.
785\end_layout
786
787\begin_layout Plain Layout
788
789UST_TRACE=1 UST_AUTOPROBE=1 ./prog
0ce2af7f
PMF
790\end_layout
791
792\end_inset
793
794
795\end_layout
796
797\begin_layout Standard
798In order for the trace to be saved, ustd must be running when the traced
799 program is started.
800\end_layout
801
a8afdd3c
PMF
802\begin_layout Section
803Viewing and Analyzing the Trace
804\end_layout
805
0ce2af7f
PMF
806\begin_layout Standard
807LTTV may be used for opening the trace.
808 If an appropriate time source was used, it may be opened concurrently with
809 other application traces and kernel traces.
810\end_layout
811
a8afdd3c
PMF
812\begin_layout Section
813Advanced Concepts
814\end_layout
815
816\begin_layout Subsection
0ce2af7f 817Using Custom Probes for Conditional Tracing
a8afdd3c
PMF
818\end_layout
819
820\begin_layout Subsection
821Instrumenting Calls to Library Functions without Recompilation
822\end_layout
823
824\begin_layout Standard
825Calls to uninstrumented libraries may be instrumented by creating a wrapper
826 library that intercepts calls to the library, trigger an instrumentation
827 point.
828\end_layout
829
3f05bdbd
PMF
830\begin_layout Standard
831Such an example can be found in the libmallocwrap directory of the ust code
832 package.
833\end_layout
834
a8afdd3c
PMF
835\begin_layout Subsection
836Tracing Programs Without Linking them to the Tracing Library
837\end_layout
838
839\begin_layout Standard
840Programs that were not instrumented nor linked with the tracing libraries
841 may still be traced.
842 In order to produce events, they must be linked to instrumented libraries
843 or use instrumented library wrappers as described in section xx.
844\end_layout
845
846\begin_layout Standard
847\begin_inset listings
848inline false
849status open
850
851\begin_layout Plain Layout
852
853LD_PRELOAD=...
854 program
855\end_layout
856
857\end_inset
858
859
860\end_layout
861
862\begin_layout Section
863\start_of_appendix
864Format of Marker Format Strings
865\end_layout
866
0ce2af7f
PMF
867\begin_layout Standard
868The format of Marker format strings is inspired from printf() format strings.
869 As with printf(), it is used to indicate to the parsing function the type
870 of the arguments that are passed.
871 Additionally, format strings indicate the name of each argument and the
872 format of that argument in the trace.
873 The structure of a typical format string is the following.
874\end_layout
875
876\begin_layout Standard
877\begin_inset listings
878inline false
879status open
880
881\begin_layout Plain Layout
882
883\begin_inset Quotes eld
884\end_inset
885
886field_name1 #tracetype1 %ctype1 field_name2 #tracetype2 %ctype2
887\begin_inset Quotes erd
888\end_inset
889
890
891\end_layout
892
893\end_inset
894
895
896\end_layout
897
898\begin_layout Description
899field_name: The name of the field, as it will be seen when the trace is
900 parsed.
901\end_layout
902
903\begin_layout Description
904tracetype: The type of the argument as it will be written in the trace.
905\end_layout
906
907\begin_layout Description
908ctype: The C type of the argument passed to the Marker (this is very similar
909 to the %...
910 types in a printf() format string)
911\end_layout
912
913\begin_layout Standard
914Both field_name and tracetype are optional.
915 These are all valid format strings:
916\end_layout
917
918\begin_layout Standard
919\begin_inset listings
920inline false
921status open
922
923\begin_layout Plain Layout
924
925\end_layout
926
927\end_inset
928
929
930\end_layout
931
932\begin_layout Subsection
933tracetype
934\end_layout
935
936\begin_layout Standard
937A typical Marker format string looks like this:
938\end_layout
939
940\begin_layout Standard
941The serialization format string supports the basic printf format strings.
942\end_layout
943
944\begin_layout Standard
945In addition, it defines new formats that can be used to serialize more
946\end_layout
947
948\begin_layout Standard
949complex/non portable data structures.
950\end_layout
951
952\begin_layout Standard
953Typical use:
954\end_layout
955
956\begin_layout Standard
957field_name %ctype
958\end_layout
959
960\begin_layout Standard
961field_name #tracetype %ctype
962\end_layout
963
964\begin_layout Standard
965field_name #tracetype %ctype1 %ctype2 ...
966\end_layout
967
968\begin_layout Standard
969A conversion is performed between format string types supported by GCC and
970\end_layout
971
972\begin_layout Standard
973the trace type requested.
974 GCC type is used to perform type checking on format
975\end_layout
976
977\begin_layout Standard
978strings.
979 Trace type is used to specify the exact binary representation
980\end_layout
981
982\begin_layout Standard
983in the trace.
984 A mapping is done between one or more GCC types to one trace
985\end_layout
986
987\begin_layout Standard
988type.
989 Sign extension, if required by the conversion, is performed following
990\end_layout
991
992\begin_layout Standard
993the trace type.
994\end_layout
995
996\begin_layout Standard
997If a gcc format is not declared with a trace format, the gcc format is
998\end_layout
999
1000\begin_layout Standard
1001also used as binary representation in the trace.
1002\end_layout
1003
1004\begin_layout Standard
1005Strings are supported with %s.
1006\end_layout
1007
1008\begin_layout Standard
1009A single tracetype (sequence) can take multiple c types as parameter.
1010\end_layout
1011
1012\begin_layout Standard
1013c types:
1014\end_layout
1015
1016\begin_layout Standard
1017see printf(3).
1018\end_layout
1019
1020\begin_layout Standard
1021Note: to write a uint32_t in a trace, the following expression is recommended
1022\end_layout
1023
1024\begin_layout Standard
1025si it can be portable:
1026\end_layout
1027
1028\begin_layout Standard
1029("#4u%lu", (unsigned long)var)
1030\end_layout
1031
1032\begin_layout Standard
1033trace types:
1034\end_layout
1035
1036\begin_layout Standard
1037Serialization specific formats :
1038\end_layout
1039
1040\begin_layout Standard
1041Fixed size integers
1042\end_layout
1043
1044\begin_layout Standard
1045#1u writes uint8_t
1046\end_layout
1047
1048\begin_layout Standard
1049#2u writes uint16_t
1050\end_layout
1051
1052\begin_layout Standard
1053#4u writes uint32_t
1054\end_layout
1055
1056\begin_layout Standard
1057#8u writes uint64_t
1058\end_layout
1059
1060\begin_layout Standard
1061#1d writes int8_t
1062\end_layout
1063
1064\begin_layout Standard
1065#2d writes int16_t
1066\end_layout
1067
1068\begin_layout Standard
1069#4d writes int32_t
1070\end_layout
1071
1072\begin_layout Standard
1073#8d writes int64_t
1074\end_layout
1075
1076\begin_layout Standard
1077i.e.:
1078\end_layout
1079
1080\begin_layout Standard
1081#1u%lu #2u%lu #4d%lu #8d%lu #llu%hu #d%lu
1082\end_layout
1083
1084\begin_layout Standard
1085* Attributes:
1086\end_layout
1087
1088\begin_layout Standard
1089n: (for network byte order)
1090\end_layout
1091
1092\begin_layout Standard
1093#ntracetype%ctype
1094\end_layout
1095
1096\begin_layout Standard
1097is written in the trace in network byte order.
1098\end_layout
1099
1100\begin_layout Standard
1101i.e.: #bn4u%lu, #n%lu, #b%u
1102\end_layout
1103
1104\begin_layout Standard
1105TODO (eventually)
1106\end_layout
1107
1108\begin_layout Standard
1109Variable length sequence
1110\end_layout
1111
1112\begin_layout Standard
1113#a #tracetype1 #tracetype2 %array_ptr %elem_size %num_elems
1114\end_layout
1115
1116\begin_layout Standard
1117In the trace:
1118\end_layout
1119
1120\begin_layout Standard
1121#a specifies that this is a sequence
1122\end_layout
1123
1124\begin_layout Standard
1125#tracetype1 is the type of elements in the sequence
1126\end_layout
1127
1128\begin_layout Standard
1129#tracetype2 is the type of the element count
1130\end_layout
1131
1132\begin_layout Standard
1133GCC input:
1134\end_layout
1135
1136\begin_layout Standard
1137array_ptr is a pointer to an array that contains members of size
1138\end_layout
1139
1140\begin_layout Standard
1141elem_size.
1142\end_layout
1143
1144\begin_layout Standard
1145num_elems is the number of elements in the array.
1146\end_layout
1147
1148\begin_layout Standard
1149i.e.: #a #lu #lu %p %lu %u
1150\end_layout
1151
1152\begin_layout Standard
1153Callback
1154\end_layout
1155
1156\begin_layout Standard
1157#k callback (taken from the probe data)
1158\end_layout
1159
1160\begin_layout Standard
1161The following % arguments are exepected by the callback
1162\end_layout
1163
1164\begin_layout Standard
1165i.e.: #a #lu #lu #k %p
1166\end_layout
1167
1168\begin_layout Standard
1169Note: No conversion is done from floats to integers, nor from integers to
1170\end_layout
1171
1172\begin_layout Standard
1173floats between c types and trace types.
1174 float conversion from double to float
1175\end_layout
1176
1177\begin_layout Standard
1178or from float to double is also not supported.
1179\end_layout
1180
a8afdd3c
PMF
1181\end_body
1182\end_document
This page took 0.06281 seconds and 4 git commands to generate.