{"id":3505,"date":"2018-03-21T00:22:30","date_gmt":"2018-03-21T00:22:30","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/pix\/?page_id=3505"},"modified":"2021-07-06T14:32:46","modified_gmt":"2021-07-06T21:32:46","slug":"configuring-pix-to-access-pdbs-for-cpu-captures","status":"publish","type":"page","link":"https:\/\/devblogs.microsoft.com\/pix\/configuring-pix-to-access-pdbs-for-cpu-captures\/","title":{"rendered":"Configuring PIX to access PDBs for CPU Captures"},"content":{"rendered":"<p>CPU captures in PIX require access to your title\u2019s Program Databases (PDBs) to properly display functions names in callstacks, sampled function analysis and so on.<\/p>\n<h3>Generating full PDBs<\/h3>\n<p>PIX requires a title&#8217;s PDBs to be generated using the <em>\/DEBUG:FULL<\/em> linker switch. PDBs generated with the <em>\/DEBUG:FASTLINK<\/em> linker switch are not sufficient. Note that, depending on the version of Visual Studio you are using, the linker switch <em>\/DEBUG<\/em> specified without the <em>FULL<\/em> or <em>FASTLINK<\/em> option, may default to <em>FASTLINK<\/em>.<\/p>\n<p>If you see functions named &#8220;unknown&#8221; in the PIX UI, make sure that you are not using <em>FASTLINK<\/em> PDBs. The following figure shows the <em>\/DEBUG:FULL<\/em> linker option in the Visual Studio UI.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_full-1.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5338\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_full-1.png\" alt=\"Image pix cpu pdb full\" width=\"911\" height=\"544\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_full-1.png 911w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_full-1-300x179.png 300w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_full-1-768x459.png 768w\" sizes=\"(max-width: 911px) 100vw, 911px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Setting symbol paths<\/h3>\n<p>If you\u2019re profiling on the same machine you just built your title on, the path to the PDB that the compiler stored in your title\u2019s modules is typically all PIX needs to locate the PDB. However, there are scenarios in which you\u2019ll need to explicitly tell PIX where your PDBs are located. This situation often occurs if you\u2019re profiling your title on a different machine than the one used to build it. In this case, you can point PIX to your PDBs either by setting the _NT_SYMBOL_PATH environment variable, or by using the <strong>PDB Search Paths<\/strong> option on PIX\u2019s Settings page. If you&#8217;re using the _NT_SYMBOL_PATH environment variable to configure PIX to find your PDBs, remember to check the <strong>Use _NT_SYMBOL_PATH<\/strong> checkbox on the Settings page.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/07\/pix_cpu_pdb_settings.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5558\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/07\/pix_cpu_pdb_settings.png\" alt=\"Image pix cpu pdb settings\" width=\"702\" height=\"376\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/07\/pix_cpu_pdb_settings.png 702w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/07\/pix_cpu_pdb_settings-300x161.png 300w\" sizes=\"(max-width: 702px) 100vw, 702px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>You may also find it useful to configure PIX so that it can access the PDBs for the Windows OS components supplied by Microsoft. Configuring PIX in this way will give you more complete callstacks in <a href=\"https:\/\/devblogs.microsoft.com\/pix\/timing-captures-new\/\">Timing Captures<\/a>, for example.<\/p>\n<p>To configure PIX to access the Windows OS symbols, add the URL to the Microsoft symbol server (srv*c:\\symcache*https:\/\/msdl.microsoft.com\/download\/symbols) as shown in the following screenshot.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_windows_pdbs.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5340\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_windows_pdbs.png\" alt=\"Image pix cpu pdb windows pdbs\" width=\"483\" height=\"200\" srcset=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_windows_pdbs.png 483w, https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/02\/pix_cpu_pdb_windows_pdbs-300x124.png 300w\" sizes=\"(max-width: 483px) 100vw, 483px\" \/><\/a><\/p>\n<h3>Reloading symbols<\/h3>\n<p>If you make changes to your symbol path settings while a <a href=\"https:\/\/devblogs.microsoft.com\/pix\/timing-captures-new\/\">Timing Capture<\/a> is open, use the <strong>Reload Symbols<\/strong> menu option on the <strong>Manage Symbols<\/strong> menu in the upper left corner of the capture to cause PIX to re-process the symbols.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/07\/pix_new_timing_capture_manage_symbols_menu.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5559\" src=\"https:\/\/devblogs.microsoft.com\/pix\/wp-content\/uploads\/sites\/41\/2021\/07\/pix_new_timing_capture_manage_symbols_menu.png\" alt=\"Image pix new timing capture manage symbols menu\" width=\"245\" height=\"134\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>CPU captures in PIX require access to your title\u2019s Program Databases (PDBs) to properly display functions names in callstacks, sampled function analysis and so on. Generating full PDBs PIX requires a title&#8217;s PDBs to be generated using the \/DEBUG:FULL linker switch. PDBs generated with the \/DEBUG:FASTLINK linker switch are not sufficient. Note that, depending on [&hellip;]<\/p>\n","protected":false},"author":1915,"featured_media":4769,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-3505","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/pages\/3505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/users\/1915"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/comments?post=3505"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/pages\/3505\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/media\/4769"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/pix\/wp-json\/wp\/v2\/media?parent=3505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}