Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Preserve original PDB path in Debug header - #183

Closed
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath
Closed

Preserve original PDB path in Debug header#183
sbomer wants to merge 4 commits into
dotnet:mainfrom
sbomer:pdbPath

Conversation

@sbomer

Copy link
Copy Markdown
Member

When writing debug symbols, Cecil places them into a .pdb file adjacent to the .dll in the output. It also uses the path of this output .pdb as the path to the PDB in the .dll's CodeView Debug Directory entry, which breaks scenarios using PathMap.

This change fixes the PDB path in the CodeView Debug Directory entry to preserve the original path if it was present in the input .dll (but doesn't otherwise affect where Cecil looks for or writes out .pdb files).

Fixesdotnet/runtime#99594.

@jtschusterjtschuster left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
Comment threadTest/Mono.Cecil.Tests/PortablePdbTests.cs
@sbomersbomer mentioned this pull request Jun 5, 2024
@sbomer

Copy link
Copy Markdown
MemberAuthor

@vitek-karas pointed out that when not using deterministic source paths, this would break because it would leave the output assembly pointing to the original pdb instead of the new pdb. So this will take more work (it may need to be conditioned on some new flag to control the behavior, or detect whether the compilation was done with deterministic source paths).

@sbomer

Copy link
Copy Markdown
MemberAuthor

I found some more context that indicates the supported way to do this is via a custom symbol writer - so I'll close this and implement a solution in linker.

@sbomersbomer closed this Jun 10, 2024
sbomer added a commit to dotnet/runtime that referenced this pull request Jun 17, 2024
This adds ILLink support for `--preserve-symbol-paths`, which is
set when `DeterministicSourcePaths` is true. This setting will
preserve the original pdb path from the inputs by using a custom
symbol writer (see
dotnet/cecil#183 (comment)).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Not all built assemblies have deterministic source paths

2 participants

@sbomer@jtschuster