我正在考虑为我们的团队设置symbol store并扩展我们的包装基础架构,以便自动将调试符号添加到商店。我们的想法是,一旦构建完成,我们在构建目录上运行symstore
并将所有.pdb
文件合并到符号存储中。原则上,这似乎相当简单,但有一个问题:
using SymStore上的页面解释了
SymStore不支持来自多个用户的同时交易。建议将一个用户指定为符号存储的“管理员”,并负责所有的add和del事务。
这是一个问题,因为我们有很多构建机器,并且两个(独立)构建完全可能在大致相同的时间完成,因此尝试并行更新符号存储。
我可以想出各种方法来确保只有一个symstore
进程更新符号存储,但在我推出自己的同步方法之前,我想知道:
是否有(准)标准或非常传统的方式更新符号存储,以确保没有多个并发事务?特别是,它似乎可以write your own symbol store creation program,也许有一个流行的替代方案, 使用某种锁等处理同步?我想其他团队必须已经(并且希望)已经解决了这个问题。
答案 0 :(得分:1)
我最后写了一个小实用程序withlockfile
,我可以使用它来同步添加事务到符号存储。这个想法是代替
symstore add ... /s \\myserver\symbols
我将调用包装在withlockfile
调用中,该调用将暂停,直到它可以获取锁定文件。锁定文件存储在实际的符号存储中。所以我上面的电话变成了
withlockfile \\myserver\symbols\lockfile.txt symstore add ... /s \\myserver\symbols
此命令在我们的构建之后执行,因为所有withlockfile
调用都使用相同的(共享)锁文件,并不会同时运行两个symstore
调用。