Использование первого не является по своей сути более безопасным, чем последнее, вам необходимо дезинформировать ввод, является ли он частью массива параметров или простой переменной. Поэтому я не вижу ничего плохого в использовании последней формы с $table
, если вы убедитесь, что содержание $table
безопасно (alphanum plus underscores?) Перед его использованием.
Извините за поздний ответ.
В Вашем сообщении Вы упоминаете наблюдение следующего сообщения об ошибке.
*** WARNING: Unable to verify checksum for C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll
Вы также задаете вопрос, "где я помещаю свои символы для моего DLL в пути символа?"
Вот ответ для первой проблемы:
Шаги для идентификации символов, которым не соответствуют.
Также, можно работать
0:001> lmv m myDll *(and examine the Checksum)
Примечание: Если у Вас есть контрольная сумма, то Windbg может соответствовать контрольной сумме DLL против контрольной суммы PDB. Каждая среда разработки имеет различный способ генерировать контрольную сумму.
Вот ответ для вопросов о том, куда поместить PDBs
, Если у Вас есть MyDll.pdb, добавленный к хранилищу символьной информации затем, можно использовать следующий синтаксис
.sympath SRV*c:\symcache*http://msdl.microsoft.com/download/symbols
, Как Roger предположил выше...
Однако, если у Вас просто есть PDB локально, можно хотеть поместить путь к PDB сначала перед выходом в сервер символов как это
.sympath C:\TheProgram\SomeSubfolder\AnotherSubfolder\;SRV*c:\symcache*http://msdl.microsoft.com/download/symbols
Этот способ, которым Windbg должен выглядеть локальным для SomSubFolder dir прежде, чем попытаться использовать кэш Сервера Символов.
Спасибо, Aaron
Не имеет значения, куда Вы помещаете частные файлы символов, пока Вы в состоянии сказать отладчик, где они.
предупреждение Вы видите , не делает , имеют любой эффект на отслеживание стека, но факт, Вы - отсутствующие символы для caller.DLL, и app.EXE делает .
символы Конфигурирования в windbg (локально) так же просто как использование:
.sympath [+] path_to_pdbs
*и
.symfix + path_to_system_pdb_store
Вы наблюдение:
MyDll! Класс А:: AFunction+SomeHexAddressна самом деле ничего не означает, пока SomeHexAddress разумен (и при условии, что MyDll.pdb был найден и загружен!) - это похоже на надлежащую запись стека вызовов.
Теперь, мой вопрос был бы, какова проблема, с которой Вы застреваете?
P.S. Вам не нужен .map файл с windbg.
Одна опция состоит в том, чтобы оставить файлы символов, где они ( т.е. в выходной папке сборки ) и затем используют параметр командной строки-y WinDbg для определения местоположения этих файлов. Используя этот подход должен гарантировать, что файлы символов всегда быть актуальными.
От Microsoft Help:
-y SymbolPath
Specifies the symbol search path. Separate multiple paths with a
semicolon (;). If the path contains spaces, it should be enclosed
in quotation marks. For details, and for other ways to change this
path, see Symbol Path.
Как часть нашего процесса сборки, мы копируем частные файлы PDB и выпущенные файлы EXE/DLL к серверу символов. В его самом простом это - просто путь UNC, но можно настроить его для доступа с помощью HTTP.
Для копирования выходных файлов используйте программу SYMSTORE.EXE.
Затем настройте свой отладчик (мы используем Visual Studio и WinDbg) смотреть в том пути. Для WinDbg самый простой способ сделать это должно установить переменную среды:
_NT_SYMBOL_PATH=
SRV*C:\WebSymbols*http://msdl.microsoft.com/download/symbols;
\\symsvr\Symbols
(который должен все быть на одной строке)
Это настраивает WinDbg, чтобы считать Microsoft Symbol Server (кэширующий файлы в C:\WebSymbols) и также посмотреть в локальном хранилище символьной информации (\\symsvr\Symbols
).
Мы также используем инструменты Source Server для хранения деталей SVN в файле PDB, подразумевая, что мы можем возвратиться к точному исходному файлу, используемому для создания конкретного выпуска. Посмотрите в ...\Debugging Tools for Windows (x86)\srcsrv
.