0

视觉工作室。如何通过附加到进程来构建调试工作的DLL(在命令行中)?据我所知,这就是我正在做的事情。

为了构建 *.cpp 文件,我把这些标志 cl /Zi /Od

为了制作 DLL,我把这些链接 /DEBUG

我有数十个 cpp 文件,这些文件后来被制作成 DLL。但是附加到进程调试不起作用......

我必须放置更多标志吗?如果 DLL 有足够的调试信息,我如何检查它本身?

谢谢!

4

1 回答 1

1

你有 DLL 的 PDB 文件吗?它是否包含所有 obj 的调试信息?除了下面提到的选项之外,您是否也在使用 cl /c 编译文件。您的编译结果是 - 在链接它们之前复制的对象。是否也复制了 pdb?

这些是导致您的问题的各种原因

  1. 在链接它们之前,您正在将 objs 复制到某个目录。链接时无法访问 pdb。
  2. 在链接之前进行一些清理会导致删除 PDB。

假设您有 3 个文件 a.cpp、b.cpp 和 c.cpp,这就是您可以尝试的

cl /c /Zi /Fd c:\mypath\mydll.pdb a.cpp
cl /c /Zi /Fd c:\mypath\mydll.pdb b.cpp
cl /c /Zi /Fd c:\mypath\mydll.pdb c.cpp

link /DEBUG fullpathtoa\a.obj fullpathtob\b.obj fullpathtob\c.obj whatever other options.

然后复制 pdb 和 dll 并尝试调试它。

另一件事是,在大多数调试器中,您都有一个对话框,显示所有已加载的二进制文件和已加载的相应 PDB。

例如。

Binary      PDB
a.exe       c:\abc\a.pdb
b.dll       c:\pqr\b.pdb
c.dll       Default symbols loaded.

加载的默认符号意味着它没有找到 PDB。您可以右键单击 etc 并将调试器指向与 c.pdb 对应的 PDB 的路径

在 Visual Studio 中,您将在 Debug Menu Option-->Windows-->Modules 中看到上述内容。“符号状态”列将显示 PDB 的路径或“加载的默认符号”。它为您的 dll 显示了什么?

于 2013-04-09T15:28:24.993 回答