PDB文件未加载

时间:2013-04-16 06:55:25

标签: windows debugging add-on pdb dbghelp

我们的应用程序在嵌套目录中有一些DLL形式的附加组件。我们正在运行测试,在后台运行DbgView实例,通过它我们获取日志。问题是我们在与构建构建的计算机不同的计算机上运行测试。这会导致PE头中的调试目录条目(通过Dumpbin工具提取)几乎无效。

我们没有像这样的符号服务器。 但是,所有的PDB文件都放在调试版本中的二进制文件旁边,并且具有正确的名称,因此我们希望它们能够毫无问题地找到它们。

通过LoadLibrary Windows函数加载加载项,然后使用SymLoadModule64函数加载符号表。根据返回值是正确的,但是当我们使用SymGetModuleInfo64检查实际加载了什么PDB时,它显示实际上没有任何内容。从最初的问题也可以看出这一点,这个问题导致我们深入研究我们的应用程序的这一部分,即上述调试日志中的调用堆栈,更确切地说是它们解决附加组件的部分混乱了。

尝试了各种版本的功能,并检查了DbgHelp库的版本,但无济于事。

从VS附加显示VS确实可以找到PDB,而我们的符号加载机制和输出窗口中的日志仍然显示有问题的行为。所有VS都能解决的是混乱的调用堆栈。

DbgHelp的符号加载使用应用程序的根目录初始化为“SymSearchPath”并启用了DEFERRED_LOAD。后者我们需要删除,前者被设置为包含附加组件的目录。另一种解决方案是将PDB文件移动到此根目录。

根据reference of the SymInitialize on MSDN,递归搜索“SymSearchPath”以获取PDB文件,但事实并非如此。 另一件事是,每当我浏览网页查找订单时,如何找到PDB文件的方法,它会读取第1行或第2行,从中搜索加载二进制文件的目录以查找PDB文件,但是我上面已经解释过,这种情况也不会发生。

总而言之,虽然问题似乎已经解决,但这里有很多令人困惑的事情。

所以..
1.如果有人知道加载PDB文件的TRUE方式,那将会很有启发性。 ..?
2. DbgHelp是否从根本上起步? 3.为什么在MSDN上这样说时,“SymSearchPath”没有被递归搜索?

此外,如果您还有其他要添加的东西,那也是受欢迎的 感谢您阅读这么长的帖子。

0 个答案:

没有答案