diff options
Diffstat (limited to 'cmds/dumpsys/dumpsys.cpp')
-rw-r--r-- | cmds/dumpsys/dumpsys.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/cmds/dumpsys/dumpsys.cpp b/cmds/dumpsys/dumpsys.cpp new file mode 100644 index 000000000000..a62fe55600e9 --- /dev/null +++ b/cmds/dumpsys/dumpsys.cpp @@ -0,0 +1,81 @@ +/* + * Command that dumps interesting system state to the log. + * + */ + +#define LOG_TAG "dumpsys" + +#include <utils/Log.h> +#include <utils/Parcel.h> +#include <utils/ProcessState.h> +#include <utils/IServiceManager.h> +#include <utils/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[]) +{ + sp<IServiceManager> sm = defaultServiceManager(); + fflush(stdout); + if (sm == NULL) { + LOGE("Unable to get default service manager!"); + aerr << "dumpsys: Unable to get default service manager!" << endl; + return 20; + } + + Vector<String16> services; + Vector<String16> args; + if (argc == 1) { + 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(); + + // 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; + } + } + + for (size_t i=0; i<N; i++) { + sp<IBinder> service = sm->checkService(services[i]); + if (service != NULL) { + 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; +} |