其他符号服务器 DLL
如果要使用不同的方法进行符号搜索,可以提供自己的符号服务器 DLL,而不是使用 SymSrv。
设置符号路径
实现 SymSrv 以外的符号服务器时,调试器的符号路径的设置方式与使用 SymSrv 的方式相同。 有关符号路径语法的说明,请参阅 Microsoft 公共符号和高级 SymSrv 用法。 唯一需要做出的更改是将字符串 symsrv.dll 替换为自己的符号服务器 DLL 的名称。
如果需要,可以在参数中随意使用不同的语法,以指示使用不同技术,例如 UNC 路径、SQL 数据库标识符或 Internet 规范。
实现自己的符号服务器
一种方法是使用与 DbgHelp 通信的代码来查找符号。 每当 DbgHelp 需要新加载的模块的符号时,它都会调用符号服务器来查找相应的符号文件。 符号服务器根据唯一参数(如时间戳或图像大小)查找每个文件。 服务器返回所请求文件的验证路径。
不得更改符号服务器返回的实际符号文件名。 DbgHelp 将符号文件的名称存储在多个位置。 因此,服务器必须返回与请求符号时指定的同名的文件。 需要此限制才能确保符号加载期间显示的符号名称是程序员将识别的符号名称。
对多个符号服务器的限制
DbgHelp 一次仅支持使用一个符号服务器。 符号路径可以包含同一符号服务器 DLL 的多个实例,但不能包含两个不同的符号服务器 DLL。 这并不是什么限制,因为你仍然可以在符号路径中包含符号服务器的多个实例,每个实例都指向不同的符号存储。 但是,如果要在两个不同的符号服务器 DLL 之间切换,则必须每次更改符号路径。
安装自定义符号服务器 DLL
符号服务器安装的详细信息将取决于你的情况。 你可能希望设置一个安装过程,以复制符号服务器 DLL 并自动设置_NT_SYMBOL_PATH环境变量。
根据服务器中使用的技术,可能还需要安装或访问符号数据本身。
可移植 PDB (程序数据库)
可移植 PDB (程序数据库) 格式描述了公共语言基础结构 (CLI 编译器生成的调试信息) 语言以及调试器和其他工具使用的调试信息的编码。 格式基于 ECMA-335 分区 II 元数据标准。 它支持在不同的操作系统和平台上进行操作。 有关详细信息,请参阅 可移植 PDB 符号。
自定义符号存储和符号服务器
有关创建自定义符号服务器的信息,请参阅 自定义符号存储和符号服务器。