自动化符号匹配

至此,我希望你相信调试符号需要匹配来让调试器变得有用。没有它,调试器要么拒绝一个用户的请求,或者更糟的是给出不正确的答案。在原则上找到包含匹配符号的文件不是有挑战性。但是如果产品包含很多模块和很多发布版本、服务包,热修复和补丁要支持,它可以是繁琐和错误频出的。自动化找到正确调试符号文件是更容易的。

Windows符号服务器就是这样的工具,这个点子很简单。它开始于在一个服务器,被叫做符号存储,安装调试符号文件。文件会适当按照一些参数,如时间戳,checksum, 文件大小等等排序和索引。每个文件有不同的版本不同的索引,用来快速搜索。当符号存储创建后,用户可以设置符号搜索路径来包含符号存储。调试器接着会自动通过符号服务器拿到正确版本的符号文件。符号存储可以通过公司的LAN网络访问或者全世界的互联网来访问。作为一个例子,下面的符号搜索路径指向windows的所有系统dll的在线符号服务器。第一个星号的路径指向一个下载过的文件的本地缓存。如果已经下载过,它会加速已经下载过的符号文件的搜索速度。第二个星号之后的URL指向微软的公开下载网址。

SRV*D:\Public\WinSymbol*http://msdl.microsoft.com/download/symbols

有了符号服务器的帮助,开发人员不再需要摸索正确的符号文件。不幸的是,在Linux或者UNIX上没有相似的工具。但是,基本原理是使用的。写一个脚本自动化搜索是不困难的。比如,当各种版本的二进制安装在文件服务器的某个地方,这个脚本可以创建一个临时的文件夹,找到具有匹配调试符号的正确二进制,然后创建软链接到这些临时文件夹。调试器gdb可以设置映射原来的二进制搜索路径到这个新的临时文件夹,从而得到匹配的符号。

(XT: 如今Linux上已经有类似的工具,debuginfod,感兴趣可以网上搜索资料)