dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk
, '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

dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk
, '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

dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk
, '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

dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk
, '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

dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk
, '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

dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk
, '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

dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk
, '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

dotnet-gcdump: Update docs to include print verb - #809

Merged
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs
Mar 30, 2020
Merged

dotnet-gcdump: Update docs to include print verb#809
josalem merged 4 commits into
dotnet:masterfrom
mustakimali:print-verb-docs

Conversation

@mustakimali

Copy link
Copy Markdown
Contributor

Proposing new verb for reading from a gcdump and write the result in stdout.

The PR for the code is here: #791

@mustakimalimustakimali mentioned this pull request Feb 7, 2020
@josalemjosalem added this to the 5.0 milestone Feb 7, 2020
@josalem

Copy link
Copy Markdown
Contributor

Thanks @mustakimali!

I've talked a little bit offline with Noah about this. One thing we chatted about is that there is the possibility we could extract different types of data from these gcdumps besides heap stats like this. Theoretically, we could display root information or some other grouping of the data. It might make sense to use a verb like report in the vein of perf report .... It would make sense in the context of the tool: a user invokes dotnet gcdump collect ... and follows it up with dotnet gcdump report ... similar to perf. We could then add morereport types as time goes on, even adding things like multi-dump diffing.

In this model, I'm not sure having the --std-out option would make sense. Perhaps it could be replaced with --report and it would invoke the reporting logic after the collection, much like the --format flag on dotnet trace invokes the convert logic after collection.

CC @noahfalk & @shirhatti

@noahfalknoahfalk 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.

Thanks for contributing to the tools! I like where this is going and I made a few suggestions on the design.

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated

@josalemjosalem 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.

I think Noah's points are good. In my mind the following make sense:

dotnet gcdump collect ... --report <report-type># generates a file and then immediately prints the specified report

and

dotnet gcdump report <report-type> -f <filename># prints the specified report for an existing file

and

dotnet gcdump report <report-type> -p <pid># collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

@sywhang

Copy link
Copy Markdown
Contributor
dotnet gcdump collect ... --report <report-type> # generates a file and then immediately prints the specified report
dotnet gcdump report <report-type> -p <pid> # collects a gcdump from the specified process and prints the report WITHOUT writing a .gcdump file

These two commands seem way too similar and might be confusing when the user tries to do one or the other. Should we rather just go with one over the other instead of having both?

@josalem

josalem commented Feb 10, 2020

Copy link
Copy Markdown
Contributor

I just read through the perf man files looking for prior art on this, and I think Sung's point is valid. We should choose one or the other but not both to avoid semantic dissonance between the verb-flag combos.

@josalem

Copy link
Copy Markdown
Contributor

I'd like to move this PR forward so we can get around to merging its predecessor. If there isn't any more discussion on the naming, I propose we go with the following:

dotnet gcdump report [-t|--report-type] <report-type> [[-p|--pid <pid>] | [--addresss|--diagnostics-server-address <address>] | [-f|--files <file[,file[...]]>]]

i.e., we introduce the report verb, and have flags for

  • consuming a file(s) (post-mortem analysis with option to eventually support multiple files for diffing)
  • consuming a pid or diag server address to connect, take a gcdump, and report to stdout without saving a file

N.B. - The --address|--diagnostics-server-address flag is being added in #770

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

@josalem apologies for not getting back to this sooner, I will make sure I make some time for this, this weekend.

What's that <report-type> is for? is it to determine whether to connect to a diagnostic server or reading from a file? in that case the flag --address and -p would be mutually exclusive?

I also noted @noahfalk 's suggestion on formatting the output: #809 (comment)

@josalem

Copy link
Copy Markdown
Contributor

I intended <report-type> to be the type of the report being generated. Your other PR introduces a heapstat report, but I would imagine we would want to add future report types like diffs, roots, etc. The --addresss and -p flags are mutually exclusive. I may have butchered the CLI command optional/required bracing in my comment 😅.

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

Thanks got it 😄

@mustakimali

mustakimali commented Mar 1, 2020

Copy link
Copy Markdown
ContributorAuthor

Thanks for the great feedback. I've pushed the code and also updated the docs with the changes we discussed above. Let me know what do you think.

Also please look at a comment above: #809 (comment)

Code is in this separate PR: #791

Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
Comment threaddocumentation/design-docs/dotnet-tools.md Outdated
5,080,860 GC Heap bytes
66,289 GC Heap objects

Object Bytes Type

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.

Its not critical, but including the count of objects would be nice if it is possible. I unresolved the earlier comment about it and added the API that I believe should do the job MemoryGraph.GetHistogramByType()

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I briefly looked for something like that. I'll add that into the report. 👍

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I am bit confused here, is that TypeIdx property corresponds to the index of memoryGraph.m_types array?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Does this look like a correct approach? just eying the result looks like it's not giving me the correct count of objects.
https://github.com/dotnet/diagnostics/pull/791/files#diff-7fc6cf484dfedf7c72a124738460b1dfR105-R109

@noahfalknoahfalk 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.

Thanks @mustakimali for your great work on this! I commented on a few small things that hopefully can be adjusted, but even if they can't I am happy to sign off. I'll leave it to @josalem to merge whenever you guys are ready.

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@josalemjosalem 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.

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments 👍

@mustakimali

Copy link
Copy Markdown
ContributorAuthor

I'd like to echo Noah on this: thanks for all the good work! I think this is just about ready for merge and we con focus on the implementation PR. I'll merge this after you see to Noah's comments +1

I have just one question
#809 (comment)

we can discuss this in the implementation PR. Then this PR is ready to be merged. 🙏

@josalem
josalem merged commit 8365888 into dotnet:masterMar 30, 2020
@mustakimali
mustakimali deleted the print-verb-docs branch April 21, 2020 23:03
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jan 19, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mustakimali@josalem@sywhang@noahfalk