由于我们某些代码的遗留性质,我们仍在使用 Microsoft Visual 6.0 (SP6)。当我第一次附加到正在运行的进程以对其进行调试时,当我闯入该进程时,它不知道源文件的位置。因此,它要求我在给定源文件名的情况下导航到源代码树中的适当目录。它记住了这些目录,所以我不必两次进入同一个目录,但仍然很痛苦。
有没有办法用我的树中的所有源文件目录预先配置 VC6?请注意,我们的项目是使用 makefile(使用 nmake)而不是通过 DSP 构建的。
由于我们某些代码的遗留性质,我们仍在使用 Microsoft Visual 6.0 (SP6)。当我第一次附加到正在运行的进程以对其进行调试时,当我闯入该进程时,它不知道源文件的位置。因此,它要求我在给定源文件名的情况下导航到源代码树中的适当目录。它记住了这些目录,所以我不必两次进入同一个目录,但仍然很痛苦。
有没有办法用我的树中的所有源文件目录预先配置 VC6?请注意,我们的项目是使用 makefile(使用 nmake)而不是通过 DSP 构建的。
源文件的路径记录在调试信息(程序数据库,.pdb)中。使您机器上的构建树与构建它的机器相同。
是的。
进入
TOOLS
OPTIONS
DIRECTORY(选项卡)
,您可以设置 SOURCES/LIBRARIES/INCLUDE 目录位置。这些值适用于工作区中的所有项目。
我不知道设置这些值是否允许使用直接生成文件查看信息。
绝对路径信息不会记录在我们的 PDB 文件中,因为我们故意不希望将源代码树绑定到特定的顶级目录;部署时,无法将源树放置在与构建机器上使用的位置相同的位置。
EvilTeach的解决方案确实提供了预期的效果,尽管我们的源代码树实际上包含数百个目录,这使得手动输入它们有些麻烦。还有一个问题是开发人员可能在任何给定时间运行多个源树,因此在调试给定可执行文件时能够在这些树之间切换是必不可少的。
我随后发现您可以通过直接更新注册表以编程方式(至少从命令行)切换一组源目录:
REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Devstudio\6.0\Build
System\Components\Platforms\Win32 (x86)\Directories]
"Source Dirs"="<path1>;<path2>"
这还不算太糟糕,而且肯定会奏效。
但是,我确定的解决方案是将 SOURCE 环境变量设置为包含所有源路径(作为分号分隔的目录列表)。一个非常简单的批处理文件可以做到这一点,并允许在不同的树之间切换。然后,您从命令行运行 Visual C++,使用从环境中读取 SOURCE(以及 INCLUDE、LIB 和 PATH)的选项告诉它:
msdev /useenv
在 Tools->Options 下查看,您会看到 SOURCE 中的目录确实已加载。然后我能够附加到正在运行的进程,并且调试器能够找到我调试的任何代码。
生活变得轻松多了!