到目前为止,我总是将图像路径作为符号路径的一部分包含在内,所以我有这样的东西:
Symbol search path is: srv*e:\Symbols*http://msdl.microsoft.com/download/symbols;e:\tmp\BackgroundJobEngine
但正确的方法是什么?
答案 0 :(得分:2)
如果您的符号路径是
srv*e:\Symbols*http://msdl.microsoft.com/download/symbols;e:\tmp\BackgroundJobEngine
意味着
e:\Symbols
中搜索符号。如果找到,请从那里使用。在您的情况下实际发生的事情并不清楚,因为我们不知道您如何存储符号。如果将它们添加到e:\ Symbols,例如在后期构建步骤中使用symstore add
,可执行文件的符号将用于e:\ Symbols和e:\ tmp \ BackgroundJobEngine无用。
如果您不使用symstore
并且您的符号实际位于e:\ tmp \ BackgroundJobEngine中,则会使用该位置的符号。
如果符号信息在可执行文件中(exe可能包含PDB的完整路径),WinDbg也会尝试从那里加载它。如果您的计算机上没有构建可执行文件,则可能由于路径不同而失败,因此添加e:\ tmp \ BackgroundJobEngine之类的路径可能有意义。
另一种情况是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将从该位置加载程序集本身(不一定是符号)。