如何在Visual C ++中跟踪外部编译的lib

时间:2009-11-06 23:13:45

标签: c++ debugging visual-c++ linker tracing

我在Windows框中构建了非dll版本的OpenSSL。根据说明,我修改了构建脚本以包含调试符号。我可以很好地链接他们并且他们运行。但是当我尝试从我的cpp代码中进入openssl函数时,它只是跳过了。我知道这是一个总的菜鸟问题,但我该如何解决这个问题呢?我有所有的源代码和标题,但我认为必须有魔术调用我不知道告诉Visual Studio他们在哪里。或者其他什么。

谢谢! MAC-人遭受苦难 - 在窗口土地

3 个答案:

答案 0 :(得分:1)

您可以use dumpbin with the /pdbpath选项找到二进制文件的符号文件;如果找不到符号,则需要将它们移动到可以找到符号的位置。

PDB路径通常硬编码到二进制文件中,因此在构建可执行文件后无法移动PDB。您可以use the (undocumented) /pdbpath:none linker option使用其PDB文件的相对路径构建二进制文件;那么你可以将PDB放在二进制文件旁边,调试器应该找到它。

请注意,仅当二进制文件为linked with the /DEBUG option时才会生成PDB文件。

答案 1 :(得分:0)

当你构建OpenSSL时,你在哪里指定了符号文件应该去哪里?它与可执行文件位于同一目录中吗?

答案 2 :(得分:0)

符号文件(pdb)仅存在于模块(exe和dll)而不存在于目标文件中。库只是.obj文件的集合。

如果源代码是使用调试信息编译的,那么它将嵌入到.obj文件中,链接器将将这些文件提取到最终的pdb中。你需要的只是你的exe的pdb能够看到OpenSSL代码的符号。

您需要在调试器中设置源路径以包含OpenSSL目录,以便能够将这些符号与源相关联。

如果您使用的是Visual Studio,请确保调试器设置中的“仅调试我的代码”选项(或类似内容)禁用 ...虽然我不认为这会影响代码编译成你的exe。调试器更可能只是不知道源代码的位置。