簡體   English   中英

打開跟蹤文件時出錯:沒有這樣的文件或目錄(2)

[英]error opening trace file: No such file or directory (2)

我收到上述錯誤:

打開跟蹤文件時出錯:沒有這樣的文件或目錄(2)

當我在模擬器上運行我的android應用程序時。 有人可以告訴我這可能是什么原因嗎?

我正在使用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可以幫助您調試應用程序並分析其性能。 啟用它會在sdcard根文件夾中創建一個.trace文件,然后可以由ADB提取該文件並由traceview bat文件進行處理以進行處理。 DDMS也可以添加它。

它是記錄器內部使用的系統。 通常,除非您使用traceview提取跟蹤文件,否則此錯誤不會困擾您。 您應該查看與您的應用程序直接相關的錯誤/日志

如何啟用它:

有兩種方法可以生成跟蹤日志:

  1. 在代碼中包含Debug類,並調用其方法,例如startMethodTracing()stopMethodTracing() ,以開始和停止將跟蹤信息記錄到磁盤。 此選項非常精確,因為您可以精確指定在代碼中開始和停止記錄跟蹤數據的位置。

  2. 使用DDMS的方法概要分析功能來生成跟蹤日志。 此選項不太精確,因為您不修改代碼,而是指定何時啟動和停止使用DDMS的日志記錄。 盡管您對開始和停止日志的確切位置的控制較少,但是如果您無權訪問應用程序的代碼或不需要精確的日志時間,則此選項很有用。

但是上述存在以下限制

如果使用的是Debug類,則您的應用程序必須具有寫入外部存儲( WRITE_EXTERNAL_STORAGE )的權限。

如果您使用的是DDMS,則Android 2.1和更早版本的設備必須裝有SD卡,並且您的應用程序必須具有寫入SD卡的權限。 Android 2.2及更高版本的設備不需要SD卡。 跟蹤日志文件直接流式傳輸到您的開發計算機。

所以本質上,traceFile訪問需要兩件事

1.)允許寫跟蹤日志文件,即WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE

2.)仿真器,其SD卡具有足夠的空間。 該文檔沒有說明這是否僅適用於DDMS,還適用於調試,因此我假設這對於通過應用程序進行調試也是正確的。

如何處理此錯誤:

現在,錯誤實質上是由於沒有sdcard路徑來創建跟蹤文件或沒有訪問權限而導致的。 這是一個舊線程,但是賞金背后的開發人員請檢查是否滿足兩個先決條件。 然后,您可以在模擬器的sdcard文件夾中搜索.trace文件。 如果存在,則不應該給您這個問題,如果它不嘗試通過將startMethodTracing添加到您的應用程序來創建它。
我不確定為什么在啟動記錄器時它會自動查找該文件。我認為,當發生錯誤/日志事件時,記錄器會在內部嘗試寫入跟蹤文件而未找到它,在這種情況下它將引發錯誤。在文檔中進行搜索后,我找不到太多關於為什么自動打開它的參考。 但這通常不會直接影響您,您應該檢查直接的應用程序日志/錯誤。 另外,Android 2.2及更高版本的設備不需要SD卡即可記錄DDMS跟蹤信息。 跟蹤日志文件直接流式傳輸到您的開發計算機。

有關Traceview的其他信息:

將跟蹤文件復制到主機

運行應用程序並且系統在設備或仿真器上創建跟蹤文件.trace之后,必須將這些文件復制到開發計算機上。 您可以使用adb pull復制文件。 這是一個示例,顯示了如何將示例文件calc.trace從仿真器的默認位置復制到仿真器主機上的/ tmp目錄:

adb pull /sdcard/calc.trace / tmp在Traceview中查看跟蹤文件要運行Traceview並查看跟蹤文件,請輸入traceview。 例如,要對上一節中復制的示例文件運行Traceview,請使用:

traceview / tmp / calc注意:如果嘗試查看啟用了ProGuard(發布模式構建)的應用程序的跟蹤日志,可能會混淆某些方法和成員名稱。 您可以使用Proguard mapping.txt文件來找出原始的原始名稱。 有關此文件的更多信息,請參見Proguard文檔。

我認為有關oncreate語句的位置或刪除uses-sdk其他任何答案都沒有關系,但這是Android,我可能是錯的。 將這個問題重定向到android工程師或將其發布為bug很有用

文檔中的更多內容

嘗試從AndroidManifest.xml文件中刪除uses-sdk部分。 它對我有用!

不要使用配置過低的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

我懷疑對日志所做的更改沒有保存到SD卡中,因此LogCat嘗試訪問日志時,它們不存在,從而導致錯誤消息。 刪除AVD並重新創建它的操作將刪除文件,並且下一次啟動是全新啟動,從而使LogCat可以訪問虛擬SD卡。

您將無法在模擬器中訪問您的真實SD卡。 您將必須按照本教程中的步驟將仿真器定向到開發環境中充當SD卡的目錄。

實際上,問題是未安裝/sys/kernel/debug ,或者正在運行的內核沒有編譯ftrace跟蹤程序,因此/sys/kernel/debug/tracing不可用。 這是platform_frameworks_native/libs/utils/Trace.cpp錯誤的代碼( 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);
    }
}

日志消息肯定可以提供更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM