2012-03-31 1 views
0

У меня есть нить с этим методом выполнения:Как иметь следы всех выполняемых функций

public void run(){  
    MAPTable t1 = new MAPTable(); 
    t1.init(); 
    while(true){ 
     try {  
      t1.refresh(); 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } 
     try { 
      sleep(10000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     }    
    }   
    } 

Как я есть я проследить всех функций, выполняемых этой теме, обратите внимание, что Init() в обновление() могут вызывать многие другие функции, основанные на многих внешних условиях.

Я попытался сделать NullPointerException или поместить один из этих строк кода referenced here в середине метода Run(), но я всегда только последний след, который является метод Run() (то же самое строка, которую я использовал для печати трассы).

Thread.currentThread().getStackTrace() 

или

for (StackTraceElement ste : Thread.currentThread().getStackTrace()) { 
    System.out.println(ste + "\n"); 
} 

или

Thread.dumpStack() 

PS: Я не так хорошо знакомы с отладчиком и я не знаю, если это может быть сделано с ним.

+0

Какая у вас конечная цель? Зачем вам нужен этот след методов, которые были вызваны? – unholysampler

+0

Ну, я хочу, чтобы список всех исполняемых функций был указан только для проверки ithat. OK –

+2

Наивный способ состоял бы в том, чтобы добавить регистрацию в каждую из возможных вызываемых функций, показывая идентификатор потока - не уверен, что есть лучший способ. – assylias

ответ

2

Вы можете найти полезную информацию в http://blog.zvikico.com/2007/11/five-ways-for-t.html

Я думаю, что некоторые из профайлеров могут быть в состоянии предоставить варианты для создания всех следов вызовов.