시작하기, 뭐든

이클립스 Run할 때 "The virtual machine was unable to remove all stack frames running old code from the call stack" 에러 해결 본문

코딩 오류기

이클립스 Run할 때 "The virtual machine was unable to remove all stack frames running old code from the call stack" 에러 해결

Gascon 2022. 1. 7. 22:48

시작하기, 뭐든 - 기록 19일차

 

오늘은 코딩테스트를 풀면서 만났던 오류를 해결하면서 "코딩 오류기" 카테고리를 하나 새로 만들었다.

김씨 포류기 느낌으로다가...

 

코딩하면서 마주치는 오류들을 정리해보려고 한다.

오늘 마주친 에러는 이클립스에서 Run할 때 아래와 같은 팝업창이 뜨는 에러였다.

 

[에러코드 전문]
The virtual machine was unable to remove all stack frames running old code from the call stack. The virtual machine is not supplying the debuffer with valid data for thoes frames. Stepping into these obsolete frames may be hazardous to the target virtual machine.

 

구글신은 모르는게 없다는 말을 믿고 검색했는데, 생각보다 해결법을 찾는에 오래 걸렸다. 한국어로 된 포스팅을 더욱 찾기 힘들어서 이 포스팅을 쓰게 됐다.

 

일단, 원인은 여기서 찾을 수 있었다.

https://coderanch.com/t/104238/ide/big-plese

 

i have a big problem,plese help me (IDEs and Version Control forum at Coderanch)

 

coderanch.com

해당 오류가 나올때는 디버깅의 breakpoint와 연관이 있었다.

디버그 모드에서 실행을 하면 breakpoint에서 멈추게 되는데 이때 코드를 변경하고 서버를 실행하기위해 저장하게되면 오류가 뜬다.

breakpoint 이전에 있는 코드들은 "active" 상태의 코드들인데 이 상태에서 코드를 변경하니 문제가 생긴다는 이야기.

 

좀 더 명확하게 코드를 보면서 얘기해보자.

 

현재 7번째 줄에 breakpoint가 걸려있다. 

디버그 모드로 실행하게되면 breakpoint까지만 코드를 실행한다. 따라서 console창에도 "breakpoint 이전"만 찍힌다.

이렇게 breakpoint 전후로 console 찍어보면 명확하게 왜 이 에러가 나왔는지 알 수 있겠지만, 대부분 코드짜다가 나도 모르는 사이에 해당 에러가 발생하기 때문에 멘붕이 오는지도 모른다.

이 상태에서 코드를 수정하고 저장을 해보자.

저장을 누르면 바로 아까 만났던 익숙한 에러 팝업이 뜬다.

한마디로 아직 코드를 실행중이여서 active한 코드가 있는데 코드를 변경했어????그럼 안돼!!라는 의미 정도인거 같다.

문제를 알면 해결은 너무 쉬워진다.

코드 실행중인데 코드를 변경해서 난 문제였으니, 코드 실행을 멈춰주면 된다.

상단에 있는 정지버튼을 누르면 된다.

 

디버그 모드가 필요없다면 코드 실행을 멈추게한 breakpoint를 지워주면 된다.

 

나간은 경우는 디버그모드를 사용하지 않았는데 단축키가 눌렸는지.. 어찌저찌 breakpoint가 설정되어 버렸다.

그래서 그런지 이 간단한거를 원인찾는다고 시간이 꽤 걸린거 같다.

 

덕분에 코딩 오류기 카테고리를 만들게도 되고,, 좋게 좋게 생각하려한다.

 

끝!

Comments