| 1 | The +{macro-name}()+ utility macro was developed to make user space |
| 2 | tracing super simple, albeit with notable disadvantages compared to |
| 3 | custom, full-fledged tracepoint providers: |
| 4 | |
| 5 | * All generated events have the same provider/event names. |
| 6 | * There's no static type checking. |
| 7 | * The only event field with user data you actually get, named `msg`, |
| 8 | is a string potentially containing the values you passed to the |
| 9 | macro using your own format. This also means that you cannot use |
| 10 | filtering using a custom expression at run time because there are no |
| 11 | isolated fields. |
| 12 | * Since +{macro-name}()+ uses C standard library's man:vasprintf(3) |
| 13 | function in the background to format the strings at run time, its |
| 14 | expected performance is lower than using custom tracepoint providers |
| 15 | with typed fields, which do not require a conversion to a string. |
| 16 | * Generally, a string containing the textual representation of the |
| 17 | user data fields is not as compact as binary fields in the |
| 18 | resulting trace. |
| 19 | |
| 20 | Thus, +{macro-name}()+ is useful for quick prototyping and debugging, but |
| 21 | should not be considered for any permanent/serious application |
| 22 | instrumentation. |
| 23 | |
| 24 | +v{macro-name}()+ does not have a `STAP_PROBEV()` call, because `STAP_PROBEV()` |
| 25 | does not support `va_list`. If you need it, you should emit this call yourself. |
| 26 | |
| 27 | See man:lttng-ust(3) to learn more about custom tracepoint providers. |