Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg
, '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

Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg
, '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

Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg
, '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

Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg
, '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

Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg
, '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

Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg
, '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

Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg
, '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

Remove printing of DacpModuleData::PEAssembly from DumpModule command - #4751

Merged
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly
Jun 24, 2024
Merged

Remove printing of DacpModuleData::PEAssembly from DumpModule command#4751
elinor-fung merged 3 commits into
dotnet:mainfrom
elinor-fung:remove-peassembly

Conversation

@elinor-fung

Copy link
Copy Markdown
Member

dotnet/runtime#103821 changes the PEAssembly field to actually be the Module.

Per dotnet/runtime#103821 (comment), remove printing it to avoid confusion.

@elinor-fung
elinor-fung requested a review from a team as a code ownerJune 22, 2024 02:39
@jkotas

Copy link
Copy Markdown
Member

Tests may need updating

@leculverleculver left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

SOS supports both Desktop Framework and .Net Core. Merging this change would make Desktop Framework debugging worse. (Also this code still needs to work on .Net 7 and 8 while they are still in support.)

Instead, you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

Comment threadsrc/SOS/Strike/strike.cpp
@jkotas

jkotas commented Jun 23, 2024

Copy link
Copy Markdown
Member

Merging this change would make Desktop Framework debugging worse.

IMHO, this change makes the .NET Framework debugging better and less confusing. The value that this line prints on .NET Framework is actually Module's PEFile, that may or may not be PEAssembly. And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

I do not have strong opinions about what this should do on .NET Framework. I am fine with keeping the .NET Framework behavior intact with all its quirks.

you should test whether .PEAssembly is equal to .Address and conditionally print it to preserve debugging the other runtime.

I like the idea of deleting clutter from the output of these commands. We can also do the same for module.dwModuleID and module.dwModuleIndex and print them only when they are non-zero. These concepts do not exist anymore. The DAC returns constant 0 for these fields: https://github.com/dotnet/runtime/blob/8e92aef5387fe1d4b9159b4a3657416ac7d0a05a/src/coreclr/debug/daccess/request.cpp#L1738-L1739.

@leculver

Copy link
Copy Markdown
Contributor

And if somebody wants to look at PEFile, it is a simple field in the Module type. It is trivial to fetch it using regular windbg debugger commands.

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

I'm also in favor of removing clutter from commands, like displaying dwModuleID/dwModuleIndex only when non-zero. I just don't want to remove potentially useful bits for Desktop Framework as an accidental biproduct of changes here when avoidable.

@jkotas

Copy link
Copy Markdown
Member

We don't ship private symbols for desktop framework. This is something SOS/dac produces without having them.

Can you do anything useful with PEAssembly pointer if you do not have private symbols? I think PEAssembly pointer is completely useless without private symbols.

@leculver

Copy link
Copy Markdown
Contributor

I don't know all of the use cases of SOS. I'd simply prefer not to remove functionality if we don't have to.

You can still implement all of the .Net Core related functionality here without affecting Desktop Framework debugging.

@leculver

Copy link
Copy Markdown
Contributor

Stepping back a second, the principle I'm trying to articulate is this:

When possible, please don't regress or take back Desktop Framework debugging features, as some of us still have to regularly debug that product. (Of course, I also mean when it wouldn't be too much work. I am not trying to hold anyone back.) As long as this version of SOS continues to support Desktop Framework, I think that's a reasonable position to take.

In this particular case, you are still able to make the changes you want to the output...it only means adding an if statement to maintain the status quo for Desktop. Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvments. :)

I think that's a pretty reasonable (and not onerous) request, regardless of how useful the functionality is. Much appreciated!

@jkotas

Copy link
Copy Markdown
Member

When possible, please don't regress or take back Desktop Framework debugging feature

I agree.

Feel free to change the text of "PEAssembly" to something more correct, always happy to have improvements. :)

Well, I am saying that the improvement would be to delete it unless somebody can explain why it is useful. This information was not in DumpModule output in the .NET Framework golden days and nobody missed it enough to add it to the output.

It was added to DumpModule output recently as part of 3000+ lines change that added support for ELF dumps: #124 . I am not sure why Mike added it. I do not see any paper trail that explains why it is useful to have this information in the DumpModule output.

@mikem8361

Copy link
Copy Markdown
Contributor

I don't remember why I added it of course. I'm completely ok with making these kind of SOS improvements.

@mikem8361

Copy link
Copy Markdown
Contributor

The SOS tests are failing because they expect a PEAssembly in the output. Line 91 in src\SOS\SOS.UnitTests\Scripts\OtherCommands.script needs to be removed.

Comment threadsrc/SOS/Strike/strike.cpp Outdated
@elinor-fung

Copy link
Copy Markdown
MemberAuthor

@leculver - completely agree with the higher level principle around Framework debugging experience and appreciate you calling it out here. For this particular case, per #4751 (comment) and #4751 (comment), this was a relatively recent addition that was never part of the original Framework experience, so I kept this PR as unconditionally removing the output.

@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 26, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@elinor-fung@jkotas@leculver@mikem8361@thaystg