WinDbg并不真正在提供的路径中搜索pdb文件

时间:2016-07-05 21:09:37

标签: windows-7 windbg

当我在简单的演示应用程序中提供符号路径时,它工作正常,但在实际应用中它不是pdb!我以相同的方式添加路径(实际路径明显不同):

// using OsmSharp.Routing;
// using OsmSharp.Routing.Osm;
// using OsmSharp.Routing.Osm.Vehicles;

var routerDb = new RouterDb();
using (var stream = new FileInfo(@"/path/to/some/osmfile.osm.pbf").OpenRead())
{
    routerDb.LoadOsmData(stream, Vehicle.Car);
}

它可能在演示中起作用的原因是因为我做'Open Executable'。在我的真实应用程序的情况下,我打开一个崩溃转储文件。但这真的有什么不同吗?

我已确保提供了图像文件路径和符号路径,但详细输出显示没有迹象表明它正在查找该提供的文件夹中的pdb文件或缓存它。

例如,在演示的情况下,有以下行表示缓存的文件(因此已被读取)。

.sympath+ c:\test\demoPdb 

但实际应用程序的详细输出中没有类似的行,我在其上进行了Windows搜索。有什么理由你可以想到为什么它可能没有在那个文件夹中查找?

请注意我没有确切的pdb文件,我预计会看到'不匹配的pdb'消息,但我没有得到它。

我也经历了this,我无法访问实际的构建机器,但我希望它至少在我给出的路径中搜索文件。

更新 .symapth的输出是:

DBGHELP: c:\test\app\pdb\App.pdb cached to C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym\App.pdb\FF12D89B77D742CAB1CB145EC85C2ABD1\App.pdb

1 个答案:

答案 0 :(得分:0)

据我所知, WinDbg 搜索提供的路径。 (实际上,它不是WinDbg,而是WinDbg将工作委托给DbgHelp,但为了简单起见,我将在下面将其称为WinDbg)

然而,我看到并且我可以重现你所拥有的问题,因为有

  1. WinDbg 不仅可以搜索立即可见的路径.sympath.exepath.srcpath),还可以搜索其他目录,例如存储在可执行文件本身的调试目录中的PDB的路径(请参阅this answer for details on the debug directory)。
  2. !sym noisy时,WinDbg 不会输出搜索的所有路径。这是不幸的,但只有微软可以改变这一点,所以我们必须忍受它。如有疑问,请使用Process Monitor.pdb过滤器来确定WinDbg尝试访问符号的位置
  3. 文档不完整,错误,过时或碎片,无论是在内置帮助中还是在网络上。这让人很难理解。这适用于符号存储(考虑0层到3层,pingme.txt和那些东西),符号路径语法(srv*symsrv*cache*和排序)或者加载符号顺序(在dllsymbolssymbols\dll等子文件夹中。
  4. 所以,是的,你很难过,但是看一下问题的历史,你已经学到了很多,而且你已经习惯了,就像我做的那样,还有其他人设法处理它。