{"id":14963656,"url":"https://github.com/dotnet/symreader-converter","last_synced_at":"2025-04-05T20:06:45.236Z","repository":{"id":17394993,"uuid":"80169646","full_name":"dotnet/symreader-converter","owner":"dotnet","description":"Converts between Windows PDB and Portable PDB formats.","archived":false,"fork":false,"pushed_at":"2025-03-24T05:02:10.000Z","size":1860,"stargazers_count":67,"open_issues_count":22,"forks_count":37,"subscribers_count":31,"default_branch":"main","last_synced_at":"2025-03-29T19:08:33.112Z","etag":null,"topics":["converter","crossplatform","debugging","managed","pdb","portable-pdb","windows-pdb"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotnet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License.txt","code_of_conduct":"CODE-OF-CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-27T00:35:41.000Z","updated_at":"2025-03-28T22:34:49.000Z","dependencies_parsed_at":"2024-01-01T14:45:49.474Z","dependency_job_id":"b3d37f82-4c98-4e22-8f42-f699c6e64078","html_url":"https://github.com/dotnet/symreader-converter","commit_stats":{"total_commits":338,"total_committers":21,"mean_commits":"16.095238095238095","dds":0.665680473372781,"last_synced_commit":"567b8a92df9431d146ff6d1e464c31a7ffec5034"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet%2Fsymreader-converter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet%2Fsymreader-converter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet%2Fsymreader-converter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet%2Fsymreader-converter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotnet","download_url":"https://codeload.github.com/dotnet/symreader-converter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247393569,"owners_count":20931812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["converter","crossplatform","debugging","managed","pdb","portable-pdb","windows-pdb"],"created_at":"2024-09-24T13:31:57.703Z","updated_at":"2025-04-05T20:06:45.112Z","avatar_url":"https://github.com/dotnet.png","language":"C#","readme":"# Microsoft.DiaSymReader.Converter\n\nConverts between Windows PDB and [Portable PDB](https://github.com/dotnet/core/blob/master/Documentation/diagnostics/portable_pdb.md) formats.\n\nPre-release builds are available from Azure DevOps public feed: `https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json` ([browse](https://dev.azure.com/dnceng/public/_packaging?_a=feed\u0026feed=dotnet-tools)).\n\n## Usage\n\nThe converter is available as a command line tool as well as a library. Both are distributed as NuGet packages.\n\n### [Pdb2Pdb](https://dotnet.myget.org/feed/symreader-converter/package/nuget/Pdb2Pdb)\n\n`Pdb2Pdb.exe \u003cdll/exe path\u003e [/pdb \u003cpath\u003e] [/out \u003cpath\u003e] [/extract]`\n\n| Switch        | Description                                             |\n|:--------------|:--------------------------------------------------------|\n| `/pdb \u003cpath\u003e` | Path to the PDB to convert. If not specified explicitly, the PDB referenced by or embedded in the DLL/EXE is used. |\n| `/out \u003cpath\u003e` | Output PDB path. |\n| `/extract`    | Extract PDB embedded in the DLL/EXE. |\n| `/sourcelink` | When converting to Windows PDB do not convert SourceLink to `srcsrv` format. By default both SourceLink and srcsrv are included in the converted PDB. |\n| `/nowarn *`                 | Suppress all warnings. All warnings are reported by default. |\n| `/nowarn \u003cn1,n2,...\u003e`       | Suppress specified warning. |\n| `/srcsvrvar \u003cname\u003e=\u003cvalue\u003e` | Add specified variable to srcsvr stream. Only applicable when converting to Windows PDB and `/sourcelink` is not specified. |\n\n\n`/extract` and `/pdb` are mutually exclusive.\n\nExample: Create and build .NET Core Standard library and convert its Portable PDB to Windows PDB to be published to Symbol Store.\n\n```\n\u003e dotnet new classlib\n\u003e dotnet build\n\u003e cd bin\\Debug\\netstandard2.0\n\u003e mkdir SymStore\n\u003e Pdb2Pdb MyProject.dll /out SymStore\\MyProject.pdb\n```\n\n### [Microsoft.DiaSymReader.Converter](https://dotnet.myget.org/feed/symreader-converter/package/nuget/Microsoft.DiaSymReader.Converter)\n\nThe package provides the following public APIs:\n\n```C#\n\nnamespace Microsoft.DiaSymReader.Tools\n{\n    public class PdbConverter\n    {\n        /// \u003csummary\u003e\n        /// An instance of \u003csee cref=\"PdbConverter\"/\u003e with no diagnostic reporting.\n        /// \u003c/summary\u003e\n        public static PdbConverter Default { get; }\n        \n        /// \u003csummary\u003e\n        /// Creates PDB converter with an optional callback invoked whenever a diagnostic is to be reported.\n        /// \u003c/summary\u003e\n        public PdbConverter(Action\u003cPdbDiagnostic\u003e diagnosticReporter = null);\n\n        /// \u003csummary\u003e\n        /// Checks whether given PDB stream has Portable format.\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"pdbStream\"\u003eStream.\u003c/param\u003e\n        /// \u003creturns\u003eReturns true if the given stream starts with a Portable PDB signature.\u003c/returns\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"pdbStream\"/\u003e does not support read and seek operations.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentNullException\"\u003e\u003cparamref name=\"pdbStream\"/\u003e is null.\u003c/exception\u003e\n        /// \u003cexception cref=\"IOException\"\u003eIO error while reading from or writing to a stream.\u003c/exception\u003e\n        /// \u003cexception cref=\"ObjectDisposedException\"\u003eStream has been disposed while reading.\u003c/exception\u003e\n        public static bool IsPortable(Stream pdbStream);\n\n        /// \u003csummary\u003e\n        /// Converts Windows PDB stream to Portable PDB.\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"peStream\"\u003ePE image stream (.dll or .exe)\u003c/param\u003e\n        /// \u003cparam name=\"sourcePdbStream\"\u003eSource stream of Windows PDB data. Must be readable.\u003c/param\u003e\n        /// \u003cparam name=\"targetPdbStream\"\u003eTarget stream of Portable PDB data. Must be writable.\u003c/param\u003e\n        /// \u003cexception cref=\"ArgumentNullException\"\u003e\u003cparamref name=\"peStream\"/\u003e, \u003cparamref name=\"sourcePdbStream\"/\u003e, or \u003cparamref name=\"targetPdbStream\"/\u003e is null.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"peStream\"/\u003e does not support read and seek operations.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"sourcePdbStream\"/\u003e does not support reading.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"targetPdbStream\"/\u003e does not support writing.\u003c/exception\u003e\n        /// \u003cexception cref=\"BadImageFormatException\"\u003eThe format of the PE image or the source PDB image is invalid.\u003c/exception\u003e\n        /// \u003cexception cref=\"InvalidDataException\"\u003eThe PDB doesn't match the CodeView Debug Directory record in the PE image.\u003c/exception\u003e\n        /// \u003cexception cref=\"IOException\"\u003eIO error while reading from or writing to a stream.\u003c/exception\u003e\n        /// \u003cexception cref=\"ObjectDisposedException\"\u003eStream has been disposed while reading/writing.\u003c/exception\u003e\n        public void ConvertWindowsToPortable(Stream peStream, Stream sourcePdbStream, Stream targetPdbStream);\n\n        /// \u003csummary\u003e\n        /// Converts Windows PDB stream to Portable PDB.\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"peReader\"\u003ePE image stream (.dll or .exe)\u003c/param\u003e\n        /// \u003cparam name=\"sourcePdbStream\"\u003eSource stream of Windows PDB data. Must be readable.\u003c/param\u003e\n        /// \u003cparam name=\"targetPdbStream\"\u003eTarget stream of Portable PDB data. Must be writable.\u003c/param\u003e\n        /// \u003cexception cref=\"ArgumentNullException\"\u003e\u003cparamref name=\"peReader\"/\u003e, \u003cparamref name=\"sourcePdbStream\"/\u003e, or \u003cparamref name=\"targetPdbStream\"/\u003e is null.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"sourcePdbStream\"/\u003e does not support reading.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"targetPdbStream\"/\u003e does not support writing.\u003c/exception\u003e\n        /// \u003cexception cref=\"BadImageFormatException\"\u003eThe format of the PE image or the PDB stream is invalid.\u003c/exception\u003e\n        /// \u003cexception cref=\"InvalidDataException\"\u003eThe PDB doesn't match the CodeView Debug Directory record in the PE image.\u003c/exception\u003e\n        /// \u003cexception cref=\"IOException\"\u003eIO error while reading from or writing to a stream.\u003c/exception\u003e\n        /// \u003cexception cref=\"ObjectDisposedException\"\u003eStream has been disposed while reading/writing.\u003c/exception\u003e\n        public void ConvertWindowsToPortable(PEReader peReader, Stream sourcePdbStream, Stream targetPdbStream);\n\n        /// \u003csummary\u003e\n        /// Converts Portable PDB stream to Windows PDB.\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"peStream\"\u003ePE image stream (.dll or .exe)\u003c/param\u003e\n        /// \u003cparam name=\"sourcePdbStream\"\u003eSource stream of Portable PDB data. Must be readable.\u003c/param\u003e\n        /// \u003cparam name=\"targetPdbStream\"\u003eTarget stream of Windows PDB data. Must be writable.\u003c/param\u003e\n        /// \u003cparam name=\"options\"\u003eConversion options.\u003c/param\u003e\n        /// \u003cexception cref=\"ArgumentNullException\"\u003e\u003cparamref name=\"peStream\"/\u003e, \u003cparamref name=\"sourcePdbStream\"/\u003e, or \u003cparamref name=\"targetPdbStream\"/\u003e is null.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"peStream\"/\u003e does not support read and seek operations.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"sourcePdbStream\"/\u003e does not support reading.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"targetPdbStream\"/\u003e does not support writing.\u003c/exception\u003e\n        /// \u003cexception cref=\"BadImageFormatException\"\u003eThe format of the PE image or the source PDB image is invalid.\u003c/exception\u003e\n        /// \u003cexception cref=\"InvalidDataException\"\u003eThe PDB doesn't match the CodeView Debug Directory record in the PE image.\u003c/exception\u003e\n        /// \u003cexception cref=\"IOException\"\u003eIO error while reading from or writing to a stream.\u003c/exception\u003e\n        /// \u003cexception cref=\"ObjectDisposedException\"\u003eStream has been disposed while reading/writing.\u003c/exception\u003e\n        public void ConvertPortableToWindows(Stream peStream, Stream sourcePdbStream, Stream targetPdbStream, PortablePdbConversionOptions options = null);\n\n        /// \u003csummary\u003e\n        /// Converts Portable PDB stream to Windows PDB.\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"peReader\"\u003ePE reader.\u003c/param\u003e\n        /// \u003cparam name=\"sourcePdbStream\"\u003eSource stream of Portable PDB data. Must be readable.\u003c/param\u003e\n        /// \u003cparam name=\"targetPdbStream\"\u003eTarget stream of Windows PDB data. Must be writable.\u003c/param\u003e\n        /// \u003cparam name=\"options\"\u003eConversion options.\u003c/param\u003e\n        /// \u003cexception cref=\"ArgumentNullException\"\u003e\u003cparamref name=\"peReader\"/\u003e, \u003cparamref name=\"sourcePdbStream\"/\u003e, or \u003cparamref name=\"targetPdbStream\"/\u003e is null.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"sourcePdbStream\"/\u003e does not support reading.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"targetPdbStream\"/\u003e does not support writing.\u003c/exception\u003e\n        /// \u003cexception cref=\"BadImageFormatException\"\u003eThe format of the PE image or the source PDB image is invalid.\u003c/exception\u003e\n        /// \u003cexception cref=\"InvalidDataException\"\u003eThe PDB doesn't match the CodeView Debug Directory record in the PE image.\u003c/exception\u003e\n        /// \u003cexception cref=\"IOException\"\u003eIO error while reading from or writing to a stream.\u003c/exception\u003e\n        /// \u003cexception cref=\"ObjectDisposedException\"\u003eStream has been disposed while reading/writing.\u003c/exception\u003e\n        public void ConvertPortableToWindows(PEReader peReader, Stream sourcePdbStream, Stream targetPdbStream, PortablePdbConversionOptions options = null);\n\n        /// \u003csummary\u003e\n        /// Converts Portable PDB to Windows PDB.\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"peReader\"\u003ePE reader.\u003c/param\u003e\n        /// \u003cparam name=\"pdbReader\"\u003ePortable PDB reader.\u003c/param\u003e\n        /// \u003cparam name=\"targetPdbStream\"\u003eTarget stream of Windows PDB data. Must be writable.\u003c/param\u003e\n        /// \u003cparam name=\"options\"\u003eConversion options.\u003c/param\u003e\n        /// \u003cexception cref=\"ArgumentNullException\"\u003e\u003cparamref name=\"peReader\"/\u003e, \u003cparamref name=\"pdbReader\"/\u003e, or \u003cparamref name=\"targetPdbStream\"/\u003e is null.\u003c/exception\u003e\n        /// \u003cexception cref=\"ArgumentException\"\u003e\u003cparamref name=\"targetPdbStream\"/\u003e does not support writing.\u003c/exception\u003e\n        /// \u003cexception cref=\"BadImageFormatException\"\u003eThe format of the PE image or the source PDB image is invalid.\u003c/exception\u003e\n        /// \u003cexception cref=\"InvalidDataException\"\u003eThe PDB doesn't match the CodeView Debug Directory record in the PE image.\u003c/exception\u003e\n        /// \u003cexception cref=\"IOException\"\u003eIO error while reading from or writing to a stream.\u003c/exception\u003e\n        /// \u003cexception cref=\"ObjectDisposedException\"\u003eStream has been disposed while reading/writing.\u003c/exception\u003e\n        public void ConvertPortableToWindows(PEReader peReader, MetadataReader pdbReader, Stream targetPdbStream, PortablePdbConversionOptions options = null);\n\n        /// \u003csummary\u003e\n        /// Converts Portable PDB stream to Windows PDB.\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"peReader\"\u003ePE reader.\u003c/param\u003e\n        /// \u003cparam name=\"pdbReader\"\u003ePortable PDB reader.\u003c/param\u003e\n        /// \u003cparam name=\"pdbWriter\"\u003ePDB writer.\u003c/param\u003e\n        /// \u003cparam name=\"options\"\u003eConversion options.\u003c/param\u003e\n        /// \u003cexception cref=\"ArgumentNullException\"\u003e\u003cparamref name=\"peReader\"/\u003e, \u003cparamref name=\"pdbReader\"/\u003e, or \u003cparamref name=\"pdbWriter\"/\u003e is null.\u003c/exception\u003e\n        /// \u003cexception cref=\"BadImageFormatException\"\u003eThe format of the PE image or the source PDB image is invalid.\u003c/exception\u003e\n        /// \u003cexception cref=\"InvalidDataException\"\u003eThe PDB doesn't match the CodeView Debug Directory record in the PE image.\u003c/exception\u003e\n        /// \u003cexception cref=\"IOException\"\u003eIO error while reading from or writing to a stream.\u003c/exception\u003e\n        public void ConvertPortableToWindows(PEReader peReader, MetadataReader pdbReader, SymUnmanagedWriter pdbWriter, PortablePdbConversionOptions options = null);\n    }\n}\n\n```\n\n## Repository status\n\n[//]: # (Begin current test results)\n\n|    | x64 Debug|x64 Release|\n|:--:|:--:|:--:|\n|**Windows**|[![Build Status](https://ci2.dot.net/job/dotnet_symreader-converter/job/main/job/Windows_NT_Debug/badge/icon)](https://ci2.dot.net/job/dotnet_symreader-converter/job/main/job/Windows_NT_Debug/)|[![Build Status](https://ci2.dot.net/job/dotnet_symreader-converter/job/main/job/Windows_NT_Release/badge/icon)](https://ci2.dot.net/job/dotnet_symreader-converter/job/main/job/Windows_NT_Release/)|\n\n[//]: # (End current test results)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet%2Fsymreader-converter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotnet%2Fsymreader-converter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet%2Fsymreader-converter/lists"}