86 lines
2.2 KiB
C++
86 lines
2.2 KiB
C++
|
/*
|
||
|
* 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 <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();
|
||
|
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
}
|