2 * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 static int opt_channels
;
39 static struct poptOption long_options
[] = {
40 /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
41 {"help", 'h', POPT_ARG_NONE
, 0, OPT_HELP
, 0, 0},
42 {"events", 'e', POPT_ARG_NONE
, 0, OPT_EVENTS
, 0, 0},
43 {"kernel", 'k', POPT_ARG_NONE
, 0, OPT_KERNEL
, 0, 0},
44 {"pid", 'p', POPT_ARG_INT
, &opt_pid
, 0, 0, 0},
45 {"apps", 'a', POPT_ARG_NONE
, 0, OPT_APPS
, 0, 0},
46 {"session", 's', POPT_ARG_NONE
, 0, OPT_SESSIONS
, 0, 0},
47 {"channel", 'c', POPT_ARG_VAL
, &opt_channels
, 1, 0, 0},
54 static void usage(FILE *ofp
)
56 fprintf(ofp
, "usage: lttng list [options] [<executable>]\n");
58 fprintf(ofp
, " -h, --help Show this help\n");
59 fprintf(ofp
, " -e, --events List all available instrumentation\n");
60 fprintf(ofp
, " -k, --kernel List kernel instrumentation\n");
61 fprintf(ofp
, " -p, --pid PID List user-space instrumentation by PID\n");
62 fprintf(ofp
, " -a, --apps List traceable user-space applications/pids\n");
63 fprintf(ofp
, " -s, --sessions List tracing session\n");
70 * Get command line from /proc for a specific pid.
72 * On success, return an allocated string pointer pointing to the proc
74 * On error, return NULL.
76 static char *get_cmdline_by_pid(pid_t pid
)
81 char path
[24]; /* Can't go bigger than /proc/65535/cmdline */
83 snprintf(path
, sizeof(path
), "/proc/%d/cmdline", pid
);
84 fp
= fopen(path
, "r");
89 /* Caller must free() *cmdline */
90 cmdline
= malloc(PATH_MAX
);
91 ret
= fread(cmdline
, 1, PATH_MAX
, fp
);
101 * Ask for all trace events in the kernel and pretty print them.
103 static int list_kernel(void)
106 char *event_list
, *event
, *ptr
;
108 DBG("Getting all tracing events");
110 ret
= lttng_kernel_list_events(&event_list
);
112 ERR("Unable to list kernel instrumentation");
116 MSG("Kernel tracepoints:\n-------------");
119 while ((size
= sscanf(ptr
, "event { name = %m[^;]; };%n\n", &event
, &pos
)) == 1) {
121 /* Move pointer to the next line */
134 * Get the list of available sessions from the session daemon and print it to
137 static int list_sessions(void)
140 struct lttng_session
*sessions
;
142 count
= lttng_list_sessions(&sessions
);
143 DBG("Session count %d", count
);
149 MSG("Available sessions:");
150 for (i
= 0; i
< count
; i
++) {
151 MSG(" %d) %s (%s)", i
+1, sessions
[i
].name
, sessions
[i
].path
);
165 * Get the UST traceable pid list and print them to the user.
167 static int list_apps(void)
174 //count = lttng_ust_list_traceable_apps(&pids);
180 MSG("LTTng UST traceable application [name (pid)]:");
181 for (i
=0; i
< count
; i
++) {
182 cmdline
= get_cmdline_by_pid(pids
[i
]);
183 if (cmdline
== NULL
) {
184 MSG("\t(not running) (%d)", pids
[i
]);
187 MSG("\t%s (%d)", cmdline
, pids
[i
]);
191 /* Allocated by lttng_ust_list_apps() */
203 * List all instrumentation for a specific pid
206 static int list_pid(int pid)
220 * List all instrumentation for an executable on the system
223 static int list_executable(char *name)
231 * The 'list <options>' first level command
233 int cmd_list(int argc
, const char **argv
)
235 int opt
, ret
= CMD_SUCCESS
;
236 const char *command_name
;
237 static poptContext pc
;
244 pc
= poptGetContext(NULL
, argc
, argv
, long_options
, 0);
245 poptReadDefaultConfig(pc
, 0);
247 while ((opt
= poptGetNextOpt(pc
)) != -1) {
253 ret
= CMD_NOT_IMPLEMENTED
;
262 ret
= list_sessions();
272 //ret = list_pid(pid);
273 ret
= CMD_NOT_IMPLEMENTED
;
276 command_name
= poptGetArg(pc
);
277 if (command_name
!= NULL
) {
278 // ret = list_executable(command_name);
279 ret
= CMD_NOT_IMPLEMENTED
;
This page took 0.036577 seconds and 4 git commands to generate.