gdb와 같은 원시 디버거가 아니라 Java 언어 디버거를 사용하고 있다고 가정합니다.
디버거를 연결하면 Dalvik은 JIT 컴파일 코드 실행을 중단하고 인터프리터에서 모든 것을 실행합니다. 인터프리터의 덜 효율적인 버전을 사용하여 디버거를 추가로 지원하므로 메소드 호출을 "단계"하여 메소드가 예외를 throw하면 중지합니다. (모든 명령이 다음 명령에서 임시 중단 점을 설정했다면 결코 부딪치지 않을 것입니다.)
"디버그 인터프리터"와 일반 "휴대용"인터프리터는 거의 동일한 소스 코드로 만들어졌습니다. 서로 다른 매크로 정의로 두 번 빌드 된 동일한 소스 파일 - 동작 차이는 일반적으로 실행보다는 성능에 대한 것입니다.
JIT 컴파일러는 기본적으로 코드를 생성하고 실행하므로 상당히 다릅니다. 통역사와 마찬가지로 가끔 OEM modification을 제외하고 지난 몇 년 동안 많이 바뀌지 않았으므로 문제의 원인이되지는 않습니다.
디버그와 디버그 간의 가장 중요한 차이점은 성능입니다. 경합 조건이있는 것은 다르게 작동합니다. JIT 컴파일 원시 코드가있는 빠른 인터프리터에서 더 느린 해석기로 이동하기 때문입니다. 코드 구조를 알지 못하면 이것이 문제가되는지 말할 수 없지만 SMP on Android here의 개요를 찾을 수 있습니다.
읽기 http://www.vogella.com/articles/AndroidDebugging/article.html –
이것은 동기화 오류와 같습니다. –
@nitin 미안하지만 이것은 아무데도 없어. 디버깅을 사용하는 방법을 알고 싶지 않습니다. 왜 디버깅이 앱의 동작을 어떻게 변경하는지 알기를 원합니다. –