Попробуйте это вместо.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:VM="clr-namespace:BuildAssistantUI.ViewModels">
<Window.DataContext>
<VM:MainViewModel />
</Window.DataContext>
</Window>
Вы можете также попробуйте Thread.getAllStackTraces ()
, чтобы получить карту трассировки стека для всех активных потоков.
Если вам нужна трассировка только для текущего потока (а не для всех потоков в системе, как предлагает Рама), выполните:
Thread.currentThread (). getStackTrace ()
Чтобы найти вызывающего, выполните:
private String getCallingMethodName() {
StackTraceElement callingFrame = Thread.currentThread().getStackTrace()[4];
return callingFrame.getMethodName();
}
И вызовите этот метод изнутри метода, который должен знать, кто его вызывающий. Однако небольшое предупреждение: индекс вызывающего кадра в списке может варьироваться в зависимости от JVM! Все зависит от того, сколько уровней вызовов содержится в getStackTrace, прежде чем вы достигнете точки, в которой создается трассировка. Более надежным решением было бы получить трассировку и перебрать ее в поисках кадра для getCallingMethodName, а затем сделать два шага дальше, чтобы найти истинного вызывающего.
Вы также можете отправить сигнал JVM для выполнения Thread.getAllStackTraces () в запущенном процессе Java, отправив этому процессу сигнал QUIT.
В Unix / Linux используйте :
kill -QUIT process_id
, где process_id - это номер процесса вашей Java-программы.
В Windows вы можете нажать Ctrl-Break в приложении, хотя обычно вы этого не увидите, если не повторный запуск консольного процесса.
JDK6 представил другую опцию, команду jstack, которая будет отображать стек любого запущенного процесса JDK6 на вашем компьютере:
jstack [-l] < pid>
Эти параметры очень полезны для приложений, которые работают в производственной среде и не могут быть легко изменены. Они особенно полезны для диагностики тупиков во время выполнения или проблем с производительностью.
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/ http://java.sun.com/javase/6 /docs/technotes/tools/share/jstack.html
Вы можете получить трассировку стека следующим образом:
Throwable t = new Throwable();
t.printStackTrace();
Если вы хотите получить доступ к кадру, вы можете использовать t.getStackTrace () для получения массива кадров стека.
Будьте известно, что в этой трассировке стека (как и в любой другой) могут отсутствовать некоторые кадры, если компилятор точки доступа был занят оптимизацией.
Вам даже не нужно делать это в коде. Вы можете прикрепить Java HPROF к своему процессу и в любой момент нажать Control- \ для вывода дампа кучи, запущенных потоков и т. Д. . . без искажения кода вашего приложения. Это немного устарело, Java 6 поставляется с jconsole графического интерфейса пользователя, но я все еще считаю HPROF очень полезным.