Entry point is main.ps1
- Installs winsdk debugger tools to default location ${env:ProgramFiles(x86)}
- Copies all *.pdb from the project folder to a single, working folder
- Works out each pdb's store key with symstore.exe /x and drops the ones the bucket already has
- Edits the remaining pdb's to use http paths using a modified github-sourceindexer.ps1 script
- Runs microsoft's symstore.exe on the .pdb files
- Uploads output to the s3 bucket using AWS_SYMB_ACCESS_KEY_ID and AWS_SYMB_SECRET_ACCESS_KEY system env vars
The working directory needs to able to find partner scripts at .\here
A pdb's store key is its name plus the signature guid and age the compiler stamped into it, so the same binary always lands on the same key. Rather than recompressing and reuploading pdb's that are already there, the script asks the bucket first and only does the expensive work on what is missing.
The lookup fails open - if it cannot reach the bucket, or symstore cannot index, every pdb is uploaded exactly as it was before. Pass -forceUpload to skip the lookup entirely.
Pdb's with an all-F signature are dropped. symstore writes that when it cannot read a signature out
of the file, which is the case for static library compile pdb's - no binary's debug directory points
at one, so nothing can ever look the key up. vc140.pdb through vc143.pdb are dropped by name for
the same reason. Add more with -excludePdbNames (accepts wildcards, e.g. 'moc.pdb,Qt6Example*.pdb').
Set the SYMSRV_DEBUG=1 environment variable, or pass -debugOutput, to turn on verbose source
indexing and aws --debug. Both are off by default - the aws debug log alone runs to tens of
thousands of lines per build.
- .\main.ps1 -localSourceDir 'C:\github\stream-labs\crash-handler' -repo_userId 'stream-labs' -repo_name 'crash-handler' -repo_branch '912ad9e2e475d0dfd77b6433f5a63621059d4101' -ignoreArray 'awss,awsi'
- .\main.ps1 -localSourceDir 'C:\github\stream-labs\obs-studio-node' -repo_userId 'stream-labs' -repo_name 'obs-studio-node' -repo_branch '40bb496b50fa634fbc5f5d6bd3b6b42a0e2a9826' -subModules 'stream-labs,lib-streamlabs-ipc,stream-labs'
- main.bat 'workingDir' ".\main.ps1 -localSourceDir 'C:\github\stream-labs\obs-studio' -repo_userId 'stream-labs' -repo_name 'obs-studio-node' -repo_branch '41d1f33c2288bfdad8515841999f6d780295ac0f' -subModules 'plugins/enc-amf,stream-labs,obs-amd-encoder,streamlabs'"
The submodules parameter needs to know four things. The path it's located at within the project, the username that the repo belongs to, the name of the repo, and the branch used by the project. The version used at compilation time will be deduced by the script, so provide the name of the main branch such as 'master', 'head', 'streamlabs', etc.