相关疑难解决方法(0)

为什么我不能从某些设备获得HPROF转储?

正如许多有用网站所详述的,分析Android应用程序内存使用情况的一种方法是执行"kill -10 [PID]"来触发HPROF转储.这似乎适用于某些设备,logcat通常包含以下内容:

I/dalvikvm(32170): threadid=3: reacting to signal 10
I/dalvikvm(32170): SIGUSR1 forcing GC and HPROF dump
I/dalvikvm(32170): hprof: dumping VM heap to "/data/misc/heap-dump-tm1302633572-pid32170.hprof-hptemp".
I/dalvikvm(32170): hprof: dumping heap strings to "/data/misc/heap-dump-tm1302633572-    pid32170.hprof".
I/dalvikvm(32170): hprof: heap dump completed, temp file removed
Run Code Online (Sandbox Code Playgroud)

但是,在其他设备上,执行"kill -10"会导致:

I/dalvikvm( 5687): threadid=4: reacting to signal 10
I/dalvikvm( 5687): SIGUSR1 forcing GC (no HPROF)
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用的所有设备都是root用户,我确保将chmod/data/misc设置为777.执行"kill -10"后,我没有收到任何错误消息.

如果它有用,这里是我获得HPROF转储的设备:HTC ACE(Desire HD),HTC G1,HTC Nexus One(T-Mobile)

以下是我没有获得HPROF转储的设备:Nexus S,Droid,Droid X,Nexus One(AT&T)

为什么我不能从某些设备获得HPROF转储,是否有什么可以让我获得转储?

android hprof

5
推荐指数
1
解决办法
4072
查看次数

ptrace PTRACE_ATTACH失败 - 用户拥有进程的Linux权限

为什么我需要以root身份运行(而不是r00t_)?

// main()
scan.scanProcessOffset(10838, 0x7f8c14000000); // proper pid and offset

void MemoryMapper::scanProcessOffset(unsigned int procId, unsigned long long offset)
{
    long attach = ptrace(PTRACE_ATTACH, procId, NULL, NULL);
    cout << attach << endl << errno << endl;

    long memory = ptrace(PTRACE_PEEKDATA, procId, offset);
    if (memory == -1 && errno == 3)
    {
        cout << errno << endl;
        errno = 0;
    }

    cout << memory;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,我正在进行的过程由r00t_拥有

r00t_@:/proc/10838$ ls -l 
lrwxrwxrwx 1 r00t r00t_ 0 2012-04-15 08:21 exe -> /usr/bin/gedit
-rw------- 1 r00t …
Run Code Online (Sandbox Code Playgroud)

c++ linux memory ptrace

2
推荐指数
1
解决办法
3396
查看次数

标签 统计

android ×1

c++ ×1

hprof ×1

linux ×1

memory ×1

ptrace ×1