SxsTrace程序追蹤 && 錯誤信息分析


先貼錯誤:應用程序無法運行,並行配置不正確 ,使用命令行sxstrace.exe。百度解決版本

起因:同事給我一 EXE,然后基於 其進行開發 dll和模塊,但是無法加入進程,無法運行。

SxsTrace使用

1、程序無法運行, sxstrace.exe進行追蹤。

1、測試本地命令能否成功執行。 cmd 下,任意目錄,c:\> sxstrace 回車;

2、轉(cd)至程序所在目錄,運行命令:SxsTrace Trace -logfile:SxsTrace.etl,啟動跟蹤;

3、運行程序(可以命令行運行);回到命令行,點擊回車;

4、繼續運行命令:SxsTrace Parse -logfile:SxsTrace.etl -outfile:info.txt,解析跟蹤信息為文本;

 信息收集

    • vs2005 debug crt目錄: C:\Program Files (x86)\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86
    • 系統運行庫目錄(Win7 64位) : C:\Windows\winsxs\Manifests
    • Visual Studio 2005正式版的版本號是8.0.50727.42,visual studio 2005 sp1的版本號  8.0.50727.762
    • 在控制面板中,VC2005運行庫的情況:Visual c++ 2005 Redistributable 安裝版本號分別為 8.0.56366 ,8.0.61000

------------------------------------------------------------------

解析

對於一個拷貝過來的程序,出現 “程序運行錯誤,檢查並行配置,SxsTrace.exe進行追蹤。”

追蹤之后主要內容。
//重點是下面
 參考是 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。
    定義是 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50608.0"。

=================
開始生成激活上下文。
輸入參數:
    Flags = 0
    ProcessorArchitecture = Wow32
    CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en
    ManifestPath = C:\bin\bin\debug\yourapp.exe
    AssemblyDirectory = C:\bin\bin\debug\
    Application Config File =
-----------------
信息: 正在解析清單文件 C:\bin\bin\debug\yourapp.exe。
    信息: 指令清單定義標識是 (null)。
    信息: 參考: Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"
    信息: 參考: Microsoft.VC80.DebugMFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"
    信息: 參考: Microsoft.Windows.Common-Controls,language="*",processorArchitecture="x86",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.0.0"
    信息: 參考: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"
//······    
信息: 正在解析清單文件 C:\bin\bin\debug\Microsoft.VC80.DebugCRT.MANIFEST。
    信息: 指令清單定義標識是 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50608.0"。
    錯誤: 指令清單中找到的組件標識與所請求組件的標識不匹配。
    //重點是下面
    參考是 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。
    定義是 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50608.0"。
錯誤: 生成激活上下文失敗。
結束生成激活上下文。
View Code

 

      通過trace,DebugCRT的版本不對,缺乏相應的CRT(運行庫)。參考是指 "exe用的版本",定義指 "系統所有的"。通過幾個途徑,下載vs 2005 sp1 crt(vc80_8.0.50727.762) 但是感覺下到的都是release版本的。

其中 vs2005_sp1 crt C:\Windows\winsxs\Manifests 安裝之后截圖為

  繼續trace,結果如下。分析是系統仍然沒有找到debug版本的 CRT。debug版本,開發環境是需要的,想到了 vs2005 sp補丁。
下載之后,sp1

=================
開始生成激活上下文。
輸入參數:
    Flags = 0
    ProcessorArchitecture = Wow32
    CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en
    ManifestPath = C:\bin\bin\debug\swcapp.exe
    AssemblyDirectory = C:\bin\bin\debug\
    Application Config File =
-----------------
信息: 正在解析清單文件 C:\bin\bin\debug\swcapp.exe。
    信息: 指令清單定義標識是 (null)。
    信息: 參考: Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"
    信息: 參考: Microsoft.VC80.DebugMFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"
    信息: 參考: Microsoft.Windows.Common-Controls,language="*",processorArchitecture="x86",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.0.0"
    信息: 參考: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"
信息: 正在解析參考 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。
    ·······
    信息: 正在解析 ProcessorArchitecture x86 的參考。
        信息: 正在解析區域性 Neutral 的參考。
            信息: 正在應用綁定策略。
                信息: 在 C:\windows\WinSxS\manifests\x86_policy.8.0.microsoft.vc80.debugcrt_1fc8b3b9a1e18e3b_8.0.50727.42_none_3825408a574a21cb.manifest 查找發布服務器策略。
                信息: 未找到綁定策略重定向。
            信息: 開始程序集探測。
                信息: 未找到 WinSxS 中的程序集。
                信息: 嘗試在 C:\windows\assembly\GAC_32\Microsoft.VC80.DebugCRT\8.0.50727.762__1fc8b3b9a1e18e3b\Microsoft.VC80.DebugCRT.DLL 上探測指令清單。
                信息: 嘗試在 C:\bin\bin\debug\Microsoft.VC80.DebugCRT.DLL 上探測指令清單。
                信息: 嘗試在 C:\bin\bin\debug\Microsoft.VC80.DebugCRT.MANIFEST 上探測指令清單。
                信息: 嘗試在 C:\bin\bin\debug\Microsoft.VC80.DebugCRT\Microsoft.VC80.DebugCRT.DLL 上探測指令清單。
                信息: 嘗試在 C:\bin\bin\debug\Microsoft.VC80.DebugCRT\Microsoft.VC80.DebugCRT.MANIFEST 上探測指令清單。
                信息: 未找到區域性 Neutral 的指令清單。
            信息: 結束程序集探測。
    錯誤: 無法解析參考 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。
錯誤: 生成激活上下文失敗。
結束生成激活上下文。
View Code


  打補丁 vs2005 sp1(大小 約431M),C:\Windows\winsxs\Manifests 截圖

  同時 C:\Program Files (x86)\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT\Microsoft.VC80.DebugCRT.manifest
詳細為 version="8.0.50727.762" 之前為  version="8.0.50727.42"

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable></noInheritable>
    <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    <file name="msvcr80d.dll" hash="9062fecdbc9ab7df4d66e81b37e9cecdee037430" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>g5HUX4P7M3mkZuWgfND7EdkmVgs=</dsig:DigestValue></asmv2:hash></file>
    <file name="msvcp80d.dll" hash="cf233a4bb28335cd6b4f62b5947d119faefa5bcb" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>lGYgPP6K9l5G0HBKTJ/Rlj2Vybg=</dsig:DigestValue></asmv2:hash></file>
    <file name="msvcm80d.dll" hash="47021cd154192d51aad190daed426bf47156fa40" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>1fLI6D1TNH6Hwc1D/toIuhn/R+4=</dsig:DigestValue></asmv2:hash></file>
</assembly>
View Code


-------------------------------------------------------------------------------------------------------
解析成功之后的SxsTrace

=================
開始生成激活上下文。
輸入參數:
    Flags = 0
    ProcessorArchitecture = Wow32
    CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en
    ManifestPath = C:\bin\bin\debug\yourapp.exe
    AssemblyDirectory = C:\bin\bin\debug\
    Application Config File =
-----------------
信息: 正在解析清單文件 C:\bin\bin\debug\yourapp.exe。
    信息: 指令清單定義標識是 (null)。
    信息: 參考: Microsoft.Windows.Common-Controls,language="&#x2a;",processorArchitecture="x86",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.0.0"
信息: 正在解析參考 Microsoft.Windows.Common-Controls,language="&#x2a;",processorArchitecture="x86",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.0.0"。
    信息: 正在解析 ProcessorArchitecture WOW64 的參考。
    ·······
    信息: 正在解析 ProcessorArchitecture x86 的參考。
        信息: 正在解析區域性 zh-CN 的參考。
            信息: 正在應用綁定策略。
                信息: 自動服務策略重定向的程序集版本。
                信息: 發布策略程序集標識是 Microsoft.Windows.Common-Controls.Resources,language="zh-CN",processorArchitecture="x86",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.7600.16385"。
            信息: 開始程序集探測。
                信息: 嘗試在 C:\windows\WinSxS\manifests\x86_microsoft.windows.c..-controls.resources_6595b64144ccf1df_6.0.7600.16385_zh-cn_b7a33d2d3f47b7fb.manifest 上探測指令清單。
                信息: 在 C:\windows\WinSxS\manifests\x86_microsoft.windows.c..-controls.resources_6595b64144ccf1df_6.0.7600.16385_zh-cn_b7a33d2d3f47b7fb.manifest 上找到指令清單。
            信息: 結束程序集探測。
信息: 正在解析清單文件 C:\windows\WinSxS\manifests\x86_microsoft.windows.c..-controls.resources_6595b64144ccf1df_6.0.7600.16385_zh-cn_b7a33d2d3f47b7fb.manifest。
    信息: 指令清單定義標識是 Microsoft.Windows.Common-Controls.Resources,language="zh-CN",processorArchitecture="x86",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.7600.16385"。
信息: 生成激活上下文成功。//成功!
結束生成激活上下文。
View Code

=================
總析:
sxstrace追蹤,結果分析。
開發人員 如果發debug給parter(or 測試機),盡量附帶相應的 debugcrt;或者保持兩者環境相同。
但 你要是將debug版本發布成品,那。。。

    
===================================================

寫在2018.1

W2A_CP 和 A2W_CP 引發 語法錯誤 C2143.  分號之前缺少 ')'。

VS2005 Sp1補丁包:修復了 atlconv.h中 atl W2A_CP macro的  ‘)’的缺失問題

修復前后diff區別

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM