Pintool与Java

时间:2014-03-16 14:24:30

标签: java jvm fork intel system-calls

我们正在尝试使用pin工具收集Java程序的指令跟踪。但是,我们无法理解java程序中某些pin工具的某些行为。

我们尝试了两个示例程序进行比较:java_helloworld(这是一个简单的hello world程序)和c_simplefork(这是一个简单的C程序,可以分析子进程)。

  
      
  1. follow_execv命令行开关:它使用Pin执行execv类系统调用产生的所有进程。但事实并非如此   以预期的方式为java程序工作。我们观察了一个   在inscount和itrace pin的输出中的矛盾行为   工具。然而,我们甚至观察到了预期的线性趋势   inscount工具与素数的follow_execv开关一起使用   计算程序与itrace工具的情况不同。   inscount和itrace工具是否考虑了不同的类型   他们每个人的说明?
  2.   
  3. PIN_AddFollowChildProcessFunction应该在创建子项时调用辅助函数。在这里,如果我们运行c_simplefork,它   但是,正确报告子进程的进程ID   java_helloworld没有。显然,java_helloworld也应该有   显示正确的子进程ID,因为它也执行克隆系统   呼叫。我们注意到了strace中clone()系统调用的参数   两个程序的输出。对于java_helloworld CLONE_VM | CLONE_FS   | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM   | CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID。对于   c_simplefork - CLONE_CHILD_CLEARTID | CLONE_CHILD_SETTID | SIGCHLD。   所以,这种行为是由于参数的差异造成的   clone()调用两个代码?
  4.   
  5. fork_jit_tool:
    on java_helloworld -
    with follow_execv - 不会进入每个FPOINTS执行的任何方法
      没有follow_execv - 与上面相同
    在c_simplefork上 -
    用   follow_execv - 进入每个FPOINTS执行的所有3个方法   并打印正确的子进程ID。
    没有   follow_execv - 与上面相同
    为什么java程序不输入   在每个FPOINTS上执行的方法,即使它实际上也是如此   催生了一个儿童过程?
  6.   

0 个答案:

没有答案