使用WinDbg调试故障转储时图像路径的作用是什么?

时间:2016-06-04 03:24:28

标签: windbg

到目前为止,我总是将图像路径作为符号路径的一部分包含在内,所以我有这样的东西:

Symbol search path is: srv*e:\Symbols*http://msdl.microsoft.com/download/symbols;e:\tmp\BackgroundJobEngine

但正确的方法是什么?

  1. 我应该像今天一样将图像路径作为符号路径的一部分包含在内吗?
  2. 我应该将其作为图片路径传递吗?
  3. 两个

1 个答案:

答案 0 :(得分:2)

.sympath

如果您的符号路径是

srv*e:\Symbols*http://msdl.microsoft.com/download/symbols;e:\tmp\BackgroundJobEngine

意味着

  1. WinDbg将在e:\Symbols中搜索符号。如果找到,请从那里使用。
  2. 如果没有找到,它将在Microsoft符号服务器上查找,下载符号(如果可用),将其存储在e:\ Symbols中并从那里使用它。
  3. 如果没有找到,它将在e:\ tmp \ BackgroundJobEngine中查找。如果找到,请从那里使用。
  4. 在您的情况下实际发生的事情并不清楚,因为我们不知道您如何存储符号。如果将它们添加到e:\ Symbols,例如在后期构建步骤中使用symstore add,可执行文件的符号将用于e:\ Symbols和e:\ tmp \ BackgroundJobEngine无用。

    如果您不使用symstore并且您的符号实际位于e:\ tmp \ BackgroundJobEngine中,则会使用该位置的符号。

    如果符号信息在可执行文件中(exe可能包含PDB的完整路径),WinDbg也会尝试从那里加载它。如果您的计算机上没有构建可执行文件,则可能由于路径不同而失败,因此添加e:\ tmp \ BackgroundJobEngine之类的路径可能有意义。

    .exepath

    另一种情况是minidump文件不包含可执行文件本身以便最小化,因此WinDbg有一个难以分解的任务等。

    我自己从未遇到过这种情况(主要是因为我经常使用.NET,需要完整的内存),但Dmitry Vostokov在“Memory Dump Analysis Anthology Collector's Edition”一书中给出了一个例子:

    1:kd> ub bfabc399
                    ^ Unable to find valid previous instruction for 'ub bfabc399'
    
    1:kd> uf driver!ProcessObject
    No code found, aborting
    

    可以通过使用.exepath命令设置可执行路径来解决。然后,WinDbg将从该位置加载程序集本身(不一定是符号)。