Информация об абсолютном пути не записывается в наших файлах 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
Глядя в Инструменты-> Параметры, вы увидите, что каталоги из SOURCE действительно загружены. Затем я смог подключиться к работающему процессу, а отладчик смог найти любой код, в который я отлаживал.
Жизнь стала намного проще!