2013-11-20 2 views
2

수신되는 H264 비디오 스트림을 디코딩하는 앱이 있습니다. 앱을 정상적으로 사용하면 스트림을 볼 때 시각적 인 결함이 발생합니다.안드로이드 디버깅은 정확히 어떻게 작동하며 디버깅 할 때 내 앱이 다르게 동작합니까?

이상한 일은 프로세스 디버깅을 시작하자마자 아티팩트가 사라집니다! 디버깅을 중지하면 (즉, PC에서 기기를 분리하면) 아티팩트가 다시 표시됩니다.

그 이유는 당신이 전문가로부터 알고 싶습니다 : 안드로이드에서 디버깅은 어떻게 작동하고 어떤 식으로 프로세스의 행동을 변경합니까?

+0

읽기 http://www.vogella.com/articles/AndroidDebugging/article.html –

+0

이것은 동기화 오류와 같습니다. –

+0

@nitin 미안하지만 이것은 아무데도 없어. 디버깅을 사용하는 방법을 알고 싶지 않습니다. 왜 디버깅이 앱의 동작을 어떻게 변경하는지 알기를 원합니다. –

답변

2

gdb와 같은 원시 디버거가 아니라 Java 언어 디버거를 사용하고 있다고 가정합니다.

디버거를 연결하면 Dalvik은 JIT 컴파일 코드 실행을 중단하고 인터프리터에서 모든 것을 실행합니다. 인터프리터의 덜 효율적인 버전을 사용하여 디버거를 추가로 지원하므로 메소드 호출을 "단계"하여 메소드가 예외를 throw하면 중지합니다. (모든 명령이 다음 명령에서 임시 중단 점을 설정했다면 결코 부딪치지 않을 것입니다.)

"디버그 인터프리터"와 일반 "휴대용"인터프리터는 거의 동일한 소스 코드로 만들어졌습니다. 서로 다른 매크로 정의로 두 번 빌드 된 동일한 소스 파일 - 동작 차이는 일반적으로 실행보다는 성능에 대한 것입니다.

JIT 컴파일러는 기본적으로 코드를 생성하고 실행하므로 상당히 다릅니다. 통역사와 마찬가지로 가끔 OEM modification을 제외하고 지난 몇 년 동안 많이 바뀌지 않았으므로 문제의 원인이되지는 않습니다.

디버그와 디버그 간의 가장 중요한 차이점은 성능입니다. 경합 조건이있는 것은 다르게 작동합니다. JIT 컴파일 원시 코드가있는 빠른 인터프리터에서 더 느린 해석기로 이동하기 때문입니다. 코드 구조를 알지 못하면 이것이 문제가되는지 말할 수 없지만 SMP on Android here의 개요를 찾을 수 있습니다.