logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

tracefs_error_last, tracefs_error_all, tracefs_error_clear - functions to read and clear the tracefs

Author

StevenRostedt <rostedt@goodmis.org[1]>
           TzvetomirStoyanov <tz.stoyanov@gmail.com[2]>

Copying

       Copyright (C) 2020 VMware, Inc. Free use of this software is granted under the terms of the GNU Public
       License (GPL).

Description

       The tracefs_error_last() returns the last error message in the tracefs error log. Several actions that
       require proper syntax written into the tracefs file system may produce error messages in the error log.
       This function will show the most recent error in the error log.

       The tracefs_error_all() returns all messages saved in the error log. Note, this may not be all messages
       that were ever produced, as the kernel only keeps a limited amount of messages, and older ones may be
       discarded by the kernel.

       The tracefs_error_clear() will clear the error log.

Example

           #include <stdlib.h>
           #include <unistd.h>
           #include <errno.h>

           #include <tracefs.h>

           int main (int argc, char **argv, char **env)
           {
                   struct tracefs_dynevent *kevent;
                   char *system = NULL;
                   char *kprobe;
                   char *format;
                   char *addr;
                   int arg = 1;
                   int ret;

                   if (argc < 4) {
                           printf("usage: %s [system] kprobe addr fmt\n", argv[0]);
                           exit(-1);
                   }

                   if (argc > 5)
                           system = argv[arg++];

                   kprobe = argv[arg++];
                   addr = argv[arg++];
                   format = argv[arg++];

                   tracefs_error_clear(NULL);
                   kevent = tracefs_dynevent_get(TRACEFS_DYNEVENT_KPROBE, system, kprobe);
                   if (kevent) {
                           tracefs_dynevent_destroy(kevent, true);
                           tracefs_dynevent_free(kevent);
                   }

                   ret = tracefs_kprobe_raw(system, kprobe, addr, format);
                   if (ret < 0) {
                           char *err;

                           perror("Failed creating kprobe");
                           errno = 0;
                           err = tracefs_error_last(NULL);
                           if (err)
                                   fprintf(stderr, "%s\n", err);
                           else if (errno)
                                   perror("Failed reading error log");
                           free(err);
                   }

                   exit(ret);
           }

Files

tracefs.h
                   Header file to include in order to have access to the library APIs.
           -ltracefs
                   Linker switch to add when building a program that uses the library.

License

       libtracefs is Free Software licensed under the GNU LGPL 2.1

Name

       tracefs_error_last, tracefs_error_all, tracefs_error_clear - functions to read and clear the tracefs
       error log.

Notes

Reporting Bugs

       Report bugs to <linux-trace-devel@vger.kernel.org[3]>

Resources

https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/

Return Value

       Both tracefs_error_last() and tracefs_error_all() will return an allocated string an error exists in the
       log, otherwise NULL is returned. If an error occurs, errno will be set, otherwise if there is no error
       messages to display then errno is not touched.

       tracefs_error_clear() returns 0 on success or -1 on error.

See Also

libtracefs(3), libtraceevent(3), trace-cmd(1)

Synopsis

#include<tracefs.h>

       char *tracefs_error_last(struct tracefs_instance *instance);
       char *tracefs_error_all(struct tracefs_instance *instance);
       int tracefs_error_clear(struct tracefs_instance *instance);

See Also