当我在简单的演示应用程序中提供符号路径时,它工作正常,但在实际应用中它不是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
答案 0 :(得分:0)
据我所知, WinDbg 将搜索提供的路径。 (实际上,它不是WinDbg,而是WinDbg将工作委托给DbgHelp,但为了简单起见,我将在下面将其称为WinDbg)
然而,我看到并且我可以重现你所拥有的问题,因为有
.sympath
,.exepath
,.srcpath
),还可以搜索其他目录,例如存储在可执行文件本身的调试目录中的PDB的路径(请参阅this answer for details on the debug directory)。!sym noisy
时,WinDbg 不会输出搜索的所有路径。这是不幸的,但只有微软可以改变这一点,所以我们必须忍受它。如有疑问,请使用Process Monitor和.pdb
过滤器来确定WinDbg尝试访问符号的位置srv*
,symsrv*
,cache*
和排序)或者加载符号顺序(在dll
,symbols
,symbols\dll
等子文件夹中。所以,是的,你很难过,但是看一下问题的历史,你已经学到了很多,而且你已经习惯了,就像我做的那样,还有其他人设法处理它。