Debugging Tools for Windows |
如果想为符号搜索使用不同的方法,可以提供自己的符号服务器DLL,而不是使用SymSrv。
使用不是SymSrv的其他符号服务器时,调试器的符号路径设置方法和SymSrv一样。查看SymSrv获得符号路径语法的说明。唯一的不同是将字符串symsrv.dll 改为自己的符号服务器DLL的名字。
如果希望,可以在这个参数中自由的用其他语法来指定使用不同的技术,如UNC路径、SQL数据库标识符或Internet规范。
服务器的核心部分是和DbgHelp通信来查找符号的代码。每次DbgHelp 为新加载的模块请求符号时,会调用符号服务器来定位适合的符号文件。符号服务器通过时间戳或映像大小这样的唯一参数来定位每个文件。服务器为请求的文件返回一个可用的路径。要实现这些,服务器必须导出SymbolServer 函数。
服务器还需要支持SymbolServerSetOptions 和SymbolServerGetOptions函数。并且如果导出了SymbolServerClose,DbgHelp也会调用。查看符号服务器API获得这些例程文档的位置。
符号服务器不能改变实际的符号文件名。DbgHelp 在多个位置保存了符号文件的名字。因此,服务器返回的文件名必须和请求符号时指定的相同。该限制用于确保符号加载时显示的符号名是程序员能够理解的。
DbgHelp只支持一次使用一个符号服务器。 符号路径可以包含同一个符号服务器DLL的多个示例,但是不能包含多个不同的符号服务器DLL。这并不会造成很大的限制 — 因为仍然可以在符号路径中包含单个符号服务器的多个示例,每个都指向不同的符号存储。但是如果想在两个不同的符号服务器DLL之间进行切换,每次都需要重设符号路径。
安装符号服务器的细节由不同的情况决定。可能希望设置一个安装过程来自动复制符号服务器DLL和设置_NT_SYMBOL_PATH环境变量。
根据自己的服务器使用的不同技术,可能还需要安装或访问符号数据本身。