locked
FAQs: 在标准用户分析器(Standard User Analyzer,SUA)中,如何使用符号路径(symbol path)?如何在SUA中定位错误的代码行? RRS feed

  • 问题

  • 为了帮助大家更好地学习 Windows 应用程序兼容性 技术,微软论坛技术支持团队编辑了一些列的 "Windows 应用程序兼容性 常见问题及解答" 精华帖。

     

    本帖的主题是:在标准用户分析器(Standard User Analyzer,SUA)中,如何使用符号路径(symbol path)?如何在SUA中定位错误的代码行?

     

    如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。

     

    如果您想阅读更多的 "Windows 应用程序兼容性",请打开索引页面:

    http://social.microsoft.com/Forums/zh-CN/windowscompatzh/thread/11ab5032-fc98-4b59-a52a-0f2faf8f071f

     


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手
    2011年4月29日 15:59

答案

  •  

    当开发人员要审查并且通过修改代码来解决应用程序问题时,符号路径(symbol path)是相当有用的。如果你的应用程序使用本地代码(Native Code)编写的话,应用程序的私有符号(Private symbols可以让你转换并且查看到调用的代码符号,无论是代码在内存中还是某个方法的代码需要更高的权限。开发人员都可以直接进入代码,一直来修复问题。

    当代码符号与调用堆栈跟踪一起使用时,可以让我们看到目前应用程序正在调用的所有的函数信息。不仅仅能够告诉你目前你的代码停在哪个函数中,还能告诉你他是从什么地方被调用出来的。

    要让SUA知道错误发生的问题代码行,你首先要有你的二进制文件所对应的私有符号文件。在SUA,你可以在应用程序信息标签(App Info)中设置符号路径来指定你的符号文件。一个典型的符号路径设置如下:

    C:\MyTestApp\;srv*c:\symbols*http://msdl.microsoft.com/download/symbols

    其中C:\MyTestApp\是你本地存放符号文件的路径,srv*c:\symbols*http://msdl.microsoft.com/download/symbols 是用来告诉SUA使用Windows公共符号服务器(Windows Symbol Server)来提供堆栈跟踪时所需要的Windows模块的符号文件。

    当我们设置好之后,我们在通过SUA的其他选项卡来查看检测问题时,通过双击某一问题(或文件,注册表等)时,查看右下角的调用堆栈。在那里,你会发现你所需要的源代码的代码行信息。下面就是一个SUA中调用堆栈输出的代码行信息的示例:

    MyApp!GetProcessElevation+4d (d:\MyApp\Test.cpp @ 296)
    MyApp!InitInstance+61 (d:\MyApp\Test.cpp @ 142)
    MyApp!wWinMain+6f (d:\MyApp\Test.cpp @ 59)
    MyApp!__tmainCRTStartup+28b (f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c @ 578)
    MyApp!wWinMainCRTStartup+f (f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c @ 403)
    kernel32!BaseThreadInitThunk+12 ( @ 0)
    ntdll!RtlInitializeExceptionChain+63 ( @ 0)
    ntdll!RtlInitializeExceptionChain+36 ( @ 0)

     

     


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手
    2011年4月29日 15:59