Я пытаюсь понять команду Java jstack
, просматривая онлайн-документ для jstack, где говорится:
jstack выводит трассировку стека Java потоков Java для заданного процесса Java, основного файла или удаленного сервера отладки. Для каждого фрейма Java печатаются полное имя класса, имя метода, 'bci' (индекс байтового кода) и номер строки, если они доступны. С параметром -m jstack печатает как Java, так и собственные кадры всех потоков вместе с «pc» (счетчик программ). Для каждого собственного фрейма печатается ближайший собственный символ к «pc», если он доступен. Искажённые имена C++ не разбираются. Чтобы упростить имена C++, выходные данные этой команды могут быть переданы в c++filt.
У меня есть некоторые сомнения, пожалуйста, помогите мне понять эту команду.
1) Основной файл - это просто имя файла, в котором я хочу распечатать трассировку стека, или это другое? Что такое удаленный отладочный сервер и как мы можем его использовать или настроить?
2) Что такое Java Frame в этом контексте и что такое собственный кадр потока?
3) Я узнал о счетчике программ ранее, когда изучал микропроцессоры, но есть ли такое же концептуальное приложение и для Java?
4) Что означает ближайший родной символ к ПК? Кроме того, как С++ используется в Java, я никогда не сталкивался с С++, когда изучал Java.
Уточните, пожалуйста, заранее спасибо.