1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- * Command that dumps interesting system state to the log.
- *
- */
- #define LOG_TAG "dumpsys"
- #include <utils/Log.h>
- #include <binder/Parcel.h>
- #include <binder/ProcessState.h>
- #include <binder/IServiceManager.h>
- #include <binder/TextOutput.h>
- #include <utils/Vector.h>
- #include <getopt.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/time.h>
- using namespace android;
- static int sort_func(const String16* lhs, const String16* rhs)
- {
- return lhs->compare(*rhs);
- }
- int main(int argc, char* const argv[])
- {
- signal(SIGPIPE, SIG_IGN);
- sp<IServiceManager> sm = defaultServiceManager();
- fflush(stdout);
- if (sm == NULL) {
- ALOGE("Unable to get default service manager!");
- aerr << "dumpsys: Unable to get default service manager!" << endl;
- return 20;
- }
- Vector<String16> services;
- Vector<String16> args;
- bool showListOnly = false;
- if ((argc == 2) && (strcmp(argv[1], "-l") == 0)) {
- showListOnly = true;
- }
- if ((argc == 1) || showListOnly) {
- services = sm->listServices();
- services.sort(sort_func);
- args.add(String16("-a"));
- } else {
- services.add(String16(argv[1]));
- for (int i=2; i<argc; i++) {
- args.add(String16(argv[i]));
- }
- }
- const size_t N = services.size();
- if (N > 1) {
- // first print a list of the current services
- aout << "Currently running services:" << endl;
-
- for (size_t i=0; i<N; i++) {
- sp<IBinder> service = sm->checkService(services[i]);
- if (service != NULL) {
- aout << " " << services[i] << endl;
- }
- }
- }
- if (showListOnly) {
- return 0;
- }
- for (size_t i=0; i<N; i++) {
- sp<IBinder> service = sm->checkService(services[i]);
- if (service != NULL) {
- if (N > 1) {
- aout << "------------------------------------------------------------"
- "-------------------" << endl;
- aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
- }
- int err = service->dump(STDOUT_FILENO, args);
- if (err != 0) {
- aerr << "Error dumping service info: (" << strerror(err)
- << ") " << services[i] << endl;
- }
- } else {
- aerr << "Can't find service: " << services[i] << endl;
- }
- }
- return 0;
- }
|