콘텐츠로 이동

Arthas

Arthas(중국어 이름: 阿尔萨斯)는 Java 진단 도구다. Minecraft에서는 오류를 분석하거나 호출을 추적하는 데 쓸 수 있다.

공식 사이트

공식 문서 - 다운로드를 참고하자.

다운로드

Arthas용 IDEA 플러그인으로, Arthas 명령어 생성을 도와준다.

공식 문서 - 빠른 시작을 참고하자.

어떤 플러그인이 채팅 메시지를 보냈을까?

섹션 제목: “어떤 플러그인이 채팅 메시지를 보냈을까?”
Terminal window
watch -x 2 net.minecraft.server.network.PlayerConnection * '{params[0],@java.lang.Thread@currentThread().getStackTrace()}' 'params.length==2 && (params[0].class.name == "net.minecraft.network.protocol.game.ClientboundPlayerChatPacket" || params[0].class.name == "net.minecraft.network.protocol.game.ClientboundSystemChatPacket")'

설명:

  • -x 2는 탐색 깊이다. 조절하면 구체적인 인자와 결과 내용을 출력할 수 있다.
  • net.minecraft.server.network.PlayerConnection은 1.17+에서 플레이어 연결을 담당하는 주 클래스다.
  • 작은따옴표로 감싼 부분은 OGNL 표현식으로, Arthas의 핵심이다.
  • params[0]은 호출의 첫 번째 인자를 출력하게 한다.
  • @java.lang.Thread@currentThread().getStackTrace()는 호출 스택을 출력한다.
  • 뒤의 긴 덩어리는 출력 필터다. 인자 길이가 2이고, 보내는 패킷이 net.minecraft.network.protocol.game.ClientboundSystemChatPacket 또는 net.minecraft.network.protocol.game.ClientboundPlayerChatPacket인 경우만 본다.

클래스를 어떤 플러그인이 추가했는지 확인

섹션 제목: “클래스를 어떤 플러그인이 추가했는지 확인”
Terminal window
sc -d com.google.gson.Gson

너무 기초적이라 설명은 생략한다.

로그를 어떤 플러그인이 출력했는지 확인

섹션 제목: “로그를 어떤 플러그인이 출력했는지 확인”
Terminal window
watch -x 2 org.apache.logging.log4j.core.config.LoggerConfig processLogEvent '{params[0].message.message,@java.lang.Thread@currentThread().getStackTrace()}' 'params[0].message.message.contains("로그 내용의 일부")'
  • org.apache.logging.log4j.core.config.LoggerConfig는 Minecraft의 로깅 핵심 라이브러리다.
  • processLogEvent는 로그 이벤트를 기록하는 메서드다.
  • params[0].message.message,@java.lang.Thread@currentThread().getStackTrace()는 출력된 로그와 호출 스택을 출력한다.
  • params[0].message.message.contains("로그 내용의 일부")는 출력 메시지에 찾는 내용이 있는지 검사한다.