Program Tip

추적 파일 열기 오류 : 해당 파일 또는 디렉토리가 없습니다. (2)

programtip 2020. 11. 25. 08:20
반응형

추적 파일 열기 오류 : 해당 파일 또는 디렉토리가 없습니다. (2)


위의 오류가 발생합니다.

추적 파일 열기 오류 : 해당 파일 또는 디렉토리가 없습니다. (2)

에뮬레이터에서 내 안드로이드 애플리케이션을 실행할 때. 누군가 이것이 가능한 이유가 무엇인지 말해 줄 수 있습니까?

android-sdk-20을 사용하고 있으며 아래 줄이 AndroidManifest.xml에 추가되었습니다.

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" />

또한 다음 줄을 추가했습니다.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

sd 카드에 쓰는 데 문제가 있다고 생각했기 때문입니다.


컴퓨터에 minSdkVersion 또는 targetSdkVersion을 설치하지 않았기 때문에 발생합니다. 나는 지금 그것을 테스트했습니다.

예를 들어 Manifest.xml에 해당 줄이있는 경우 :

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

컴퓨터에 API17 만 설치하면 오류가보고됩니다. 테스트하려면 다른 API 버전 (이 경우 API 8)을 설치해보십시오.

그래도 중요한 오류는 아닙니다. 앱이 잘못되었다는 의미는 아닙니다.

내 표정 미안해. 영어는 제 언어가 아닙니다. 안녕!


이것이 문제라고 생각합니다

약간의 배경

Traceview는 Debug 클래스를 사용하여 코드에 추적 정보를 기록하여 만드는 실행 로그의 그래픽 뷰어입니다. Traceview는 애플리케이션을 디버그하고 성능을 프로파일 링하는 데 도움이 될 수 있습니다. 이를 활성화 .trace하면 sdcard 루트 폴더에 파일 이 생성 되고 ADB에서 추출하고 traceview bat 파일로 처리하여 처리 할 수 ​​있습니다. DDMS에 의해 추가 될 수도 있습니다.

로거가 내부적으로 사용하는 시스템입니다. 일반적으로 traceview를 사용하여 추적 파일을 추출하지 않는 한이 오류는 문제가되지 않습니다. 애플리케이션과 직접 관련된 오류 / 로그를 확인해야합니다.

어떻게 활성화합니까?

추적 로그를 생성하는 방법에는 두 가지가 있습니다.

  1. 코드의 디버그 클래스를 포함하고 다음과 같은 메서드 호출 startMethodTracing()과를 stopMethodTracing()시작하고 디스크에 추적 정보의 정지 로깅을. 이 옵션은 코드에서 추적 데이터 로깅을 시작하고 중지 할 위치를 정확하게 지정할 수 있으므로 매우 정확합니다.

  2. DDMS의 메소드 프로파일 링 기능을 사용하여 추적 로그를 생성하십시오. 이 옵션은 코드를 수정하지 않고 DDMS로 로깅을 시작하고 중지 할시기를 지정하기 때문에 덜 정확합니다. 로깅이 시작되고 중지되는 위치를 정확하게 제어 할 수는 없지만이 옵션은 애플리케이션의 코드에 액세스 할 수 없거나 정확한 로그 타이밍이 필요하지 않은 경우 유용합니다.

그러나 위의 경우 다음과 같은 제한이 있습니다.

Debug 클래스를 사용하는 경우 애플리케이션에 외부 저장소에 대한 쓰기 권한이 있어야합니다 ( WRITE_EXTERNAL_STORAGE).

DDMS를 사용하는 경우 : Android 2.1 이하 기기에는 SD 카드가 있어야하며 애플리케이션에 SD 카드에 쓸 수있는 권한이 있어야합니다. Android 2.2 이상 기기에는 SD 카드가 필요하지 않습니다. 추적 로그 파일은 개발 머신으로 직접 스트리밍됩니다.

따라서 본질적으로 traceFile 액세스에는 두 가지가 필요합니다.

1) 권한 즉, 추적 로그 파일을 작성 WRITE_EXTERNAL_STORAGE하고 READ_EXTERNAL_STORAGE좋은 측정을 위해이

2.) 충분한 공간이있는 SDCard가 연결된 에뮬레이터. 이 문서는 이것이 DDMS뿐 아니라 디버그에도 해당되는지 여부를 말하지 않으므로 응용 프로그램을 통한 디버깅에도 해당한다고 가정합니다.

이 오류로 무엇을해야합니까?

이제 오류는 본질적으로 추적 파일을 만들 sdcard 경로가 없거나 액세스 권한이없는 경우에 발생합니다. 이것은 오래된 스레드이지만 현상금의 개발자는 두 가지 전제 조건을 충족하는지 확인하십시오. 그런 다음 .trace에뮬레이터의 sdcard 폴더에서 파일을 검색 할 수 있습니다 . startMethodTracing에을 추가하여 생성하지 않으면이 문제가 발생하지 않아야 합니다.
로거가 시작될 때 자동으로이 파일을 찾는 이유를 잘 모르겠습니다. 오류 / 로그 이벤트가 발생하면 로거가 내부적으로 추적 파일에 쓰려고 시도하지만 찾지 못합니다.이 경우 오류가 발생합니다. 문서를 훑어 보면서 왜 이것이 자동으로 켜져 있는지에 대한 참조를 너무 많이 찾지 못했습니다. 그러나 일반적으로 이것은 사용자에게 직접적인 영향을 미치지 않으므로 직접 애플리케이션 로그 / 오류를 확인해야합니다. 또한 Android 2.2 이상 장치에는 DDMS 추적 로깅을위한 SD 카드가 필요하지 않습니다. 추적 로그 파일은 개발 머신으로 직접 스트리밍됩니다.

Traceview에 대한 추가 정보 :

호스트 시스템에 추적 파일 복사

애플리케이션이 실행되고 시스템이 디바이스 또는 에뮬레이터에 추적 파일 .trace를 생성 한 후 해당 파일을 개발 컴퓨터에 복사해야합니다. adb pull을 사용하여 파일을 복사 할 수 있습니다. 다음은 에뮬레이터의 기본 위치에서 에뮬레이터 호스트 머신의 / tmp 디렉토리로 예제 파일 calc.trace를 복사하는 방법을 보여주는 예입니다.

adb pull /sdcard/calc.trace / tmp Traceview에서 추적 파일보기 Traceview를 실행하고 추적 파일을 보려면 traceview를 입력하십시오. 예를 들어, 이전 섹션에서 복사 한 예제 파일에서 Traceview를 실행하려면 다음을 사용하십시오.

traceview / tmp / calc 참고 : ProGuard가 활성화 된 상태 (릴리스 모드 빌드)로 빌드 된 애플리케이션의 추적 로그를 보려는 경우 일부 메서드 및 멤버 이름이 난독 화 될 수 있습니다. Proguard mapping.txt 파일을 사용하여 난독 화되지 않은 원래 이름을 알아낼 수 있습니다. 이 파일에 대한 자세한 내용은 Proguard 설명서를 참조하십시오.

oncreate진술의 위치 지정 이나 제거 에 관한 다른 답변은 uses-sdk관련이 없다고 생각 하지만 이것은 Android이므로 틀릴 수 있습니다. 이 질문을 안드로이드 엔지니어에게 리디렉션하거나 버그로 게시하는 것이 유용 할 것입니다.

문서 에서 더보기


uses-sdk부품 양식 AndroidManifest.xml파일을 제거해보십시오 . 그것은 나를 위해 일했습니다!

구성이 너무 낮은 Android 가상 장치를 사용하지 마십시오. 중간으로 두십시오.


이 두 줄 아래에 모든 코드를 작성하십시오.

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

다시 설치하지 않고도 나를 위해 일했습니다.


SDK 버전이 너무 많이 설치되어 있고 개발 환경이 제대로 설정 되었기 때문에 모든 것을 다시 설치하고 싶지 않았습니다. 다시 설정하는 데 시간이 너무 오래 걸립니다.

나를 위해 일한 것은 삭제 한 다음 Android 가상 장치를 다시 생성하여 SD 카드 크기 값을 입력하는 것입니다 (200 MiB 사용).

AVD 생성 화면 스크린 샷

추가 정보:

위의 방법으로 문제가 일시적으로 해결되지만 반복됩니다. 방금 Android Studio 내에서 내 응용 프로그램을 사용해 보았고 Eclipse에서 이전에 알지 못했던 출력 로그에서 이것을 보았습니다.

"/Applications/Android Studio.app/sdk/tools/emulator" -avd AVD_for_Nexus_S_by_Google -netspeed full -netdelay none

WARNING: Data partition already in use. Changes will not persist!
WARNING: SD Card image already in use: /Users/[user]/.android/avd/AVD_for_Nexus_S_by_Google.avd/sdcard.img
ko:Snapshot storage already in use: /Users/[user]/.android/avd/AVD_for_Nexus_S_by_Google.avd/snapshots.img

I suspect that changes to the log are not saving to the SD Card, so when LogCat tries to access the logs, they aren't there, causing the error message. The act of deleting the AVD and re-creating it removes the files, and the next launch is a fresh launch, allowing LogCat to access the virtual SD Card.


You will not have access to your real sd card in emulator. You will have to follow the steps in this tutorial to direct your emulator to a directory on your development environment acting as your SD card.


Actually, the problem is that either /sys/kernel/debug is not mounted, or that the running kernel has no ftrace tracers compiled in so that /sys/kernel/debug/tracing is unavailable. This is the code throwing the error (platform_frameworks_native/libs/utils/Trace.cpp):

void Tracer::init() {
    Mutex::Autolock lock(sMutex);

    if (!sIsReady) {
        add_sysprop_change_callback(changeCallback, 0);

        const char* const traceFileName =
                "/sys/kernel/debug/tracing/trace_marker";
        sTraceFD = open(traceFileName, O_WRONLY);
        if (sTraceFD == -1) {
            ALOGE("error opening trace file: %s (%d)", strerror(errno), errno);
            sEnabledTags = 0;   // no tracing can occur
        } else {
            loadSystemProperty();
        }

        android_atomic_release_store(1, &sIsReady);
    }
}

The log message could definitely be a bit more informative.

참고 URL : https://stackoverflow.com/questions/11446049/error-opening-trace-file-no-such-file-or-directory-2

반응형