{"id":775,"date":"2016-06-22T14:10:55","date_gmt":"2016-06-22T12:10:55","guid":{"rendered":"http:\/\/blogs.msdn.microsoft.com\/lavanack\/?p=775"},"modified":"2022-05-30T13:51:52","modified_gmt":"2022-05-30T11:51:52","slug":"powerdbg","status":"publish","type":"post","link":"https:\/\/laurentvanacker.com\/index.php\/2016\/06\/22\/powerdbg\/","title":{"rendered":"Analyser un dump de worker process avec PowerShell \/ Worker process dump analysis with PowerShell"},"content":{"rendered":"<div id=\"fr-FR\" align=\"justify\"><a href=\"#en-US\">English version<\/a><\/div>\n<div align=\"justify\"><\/div>\n<p align=\"justify\">[MAJ 24\/06\/2016] Il y a quelques semaines un de mes coll\u00e8gues (Merci <a href=\"https:\/\/www.linkedin.com\/in\/julien-clauzel-123a22\/\" target=\"_blank\" rel=\"noopener noreferrer\">Julien<\/a> !), m&rsquo;a fait d\u00e9couvrir <a href=\"http:\/\/powerdbg.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">PowerDbg<\/a>. <a href=\"http:\/\/powerdbg.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">PowerDbg<\/a> est une librairie PowerShell vous permettant de cr\u00e9er facilement des scripts PowersShell pour automatiser des sessions de debugging WinDbg \/ CDB (plus de d\u00e9tails <a href=\"http:\/\/powerdbg.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">ici)<\/a>. Ce coll\u00e8gue m&rsquo;envoya un exemple d&rsquo;utilisation de PowerDbg pour le debug d&rsquo;une application ASP.Net au sein d&rsquo;un worker processus IIS &#8211; w3wp.exe). J&rsquo;ai d\u00e9cid\u00e9 de d\u00e9velopper une version \u00ab\u00a0full\u00a0\u00bb PowerShell de cet exemple (J&rsquo;ai supprim\u00e9 des d\u00e9pendances externes de la version originale) que je vous propose dans cet article (le fichier source est disponible <a href=\"https:\/\/github.com\/lavanack\/laurentvanacker.com\/blob\/master\/Windows%20Powershell\/ASP.Net\/New-PDBGCrashAnalysis.ps1\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a>). Dans cet exemple je charge seulement 2 extensions &#8211; <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/bb190764(v=vs.110).aspx\" target=\"_blank\" rel=\"noopener noreferrer\">SOS<\/a> and <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/hardware\/ff540665(v=vs.85).aspx\" target=\"_blank\" rel=\"noopener noreferrer\">CLR<\/a> &#8211; et je lance seulement deux commandes &#8211; !pe and !ClrStack. Vous pouvez personnaliser ou ajouter les extensions que vous voulez charger et les commandes associ\u00e9es. Le r\u00e9sultat est un fichier CSV ressemblant \u00e0 peu pr\u00e8s \u00e0 celui-ci (sortie volontairement tronqu\u00e9e) :<\/p>\n<p align=\"justify\"><a href=\"http:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-815\" src=\"http:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2.png\" alt=\"powerdbg\" width=\"1450\" height=\"111\" srcset=\"https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2.png 1450w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-300x23.png 300w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-768x59.png 768w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-1024x78.png 1024w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-1200x92.png 1200w\" sizes=\"auto, (max-width: 1450px) 100vw, 1450px\" \/><\/a><\/p>\n<div dir=\"ltr\" align=\"justify\">Si vous d\u00e9sirez g\u00e9n\u00e9rer des dumps de worker processus vous pouvez jeter un coup d&rsquo;oeil \u00e0 ces deux ressources :<\/div>\n<ul>\n<li>\n<div align=\"justify\"><a href=\"https:\/\/blogs.msdn.microsoft.com\/friis\/2010\/04\/01\/application-de-test-pour-gnrer-des-dumps-iis\/\">https:\/\/blogs.msdn.microsoft.com\/friis\/2010\/04\/01\/application-de-test-pour-gnrer-des-dumps-iis\/<\/a> (Equipe support IIS\/Azure France)<\/div>\n<\/li>\n<li>\n<div align=\"justify\"><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/bb397417.aspx\">https:\/\/msdn.microsoft.com\/en-us\/library\/bb397417.aspx<\/a> (J&rsquo;ai utilis\u00e9 ce code pour g\u00e9n\u00e9rer mon dump dans la capture d&rsquo;\u00e9cran ci-dessus)<\/div>\n<\/li>\n<\/ul>\n<div align=\"justify\">\n<hr \/>\n<\/div>\n<div align=\"justify\"><\/div>\n<div id=\"en-US\" align=\"justify\"><a href=\"#fr-FR\">Version fran\u00e7aise<\/a><\/div>\n<div align=\"justify\">\n<form id=\"gt-form\" action=\"\/\" method=\"post\" name=\"text_form\">\n<div>\n<div dir=\"ltr\">[Updated 06\/24\/2016] Some weeks ago a colleague of mine (Thanks <a href=\"https:\/\/blogs.msdn.microsoft.com\/pfedynamics\/2012\/02\/19\/bio-julien-clauzel\/\" target=\"_blank\" rel=\"noopener noreferrer\">Julien<\/a> !),pointed me to <a href=\"http:\/\/powerdbg.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">PowerDbg<\/a>. <a href=\"http:\/\/powerdbg.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">PowerDbg<\/a> is a PowerShell library that enables you to easily create PowerShell scripts to automate a WinDbg \/ CDB debugging session (further details <a href=\"http:\/\/powerdbg.codeplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">here)<\/a>. This colleague sent to me a PowerDbg use case for debugging an ASP.Net application (inside an IIS worker process &#8211; w3wp.exe). I decided to build a full PowerShell version of this example (I removed some external depencies of the original version) and I propose it to you in this article (the source file is available <a href=\"https:\/\/github.com\/lavanack\/laurentvanacker.com\/blob\/master\/Windows%20Powershell\/ASP.Net\/New-PDBGCrashAnalysis.ps1\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>). In this example I load only 2 extensions &#8211; <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/bb190764(v=vs.110).aspx\" target=\"_blank\" rel=\"noopener noreferrer\">SOS<\/a> and <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/hardware\/ff540665(v=vs.85).aspx\" target=\"_blank\" rel=\"noopener noreferrer\">CLR<\/a> &#8211; and I run only two commands &#8211; !pe and !ClrStack. You can add or customize the extensions you want to load and the related commands. The result is a CSV file looking like this one (output was truncated):<\/div>\n<\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\">\u00a0<a href=\"http:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-815\" src=\"http:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2.png\" alt=\"powerdbg\" width=\"1450\" height=\"111\" srcset=\"https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2.png 1450w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-300x23.png 300w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-768x59.png 768w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-1024x78.png 1024w, https:\/\/laurentvanacker.com\/wp-content\/uploads\/2016\/06\/powerdbg2-1200x92.png 1200w\" sizes=\"auto, (max-width: 1450px) 100vw, 1450px\" \/><\/a><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\">If you want generate worker process dumps you can take a look at this two resources :<\/div>\n<ul>\n<li><a href=\"https:\/\/blogs.msdn.microsoft.com\/friis\/2010\/04\/01\/application-de-test-pour-gnrer-des-dumps-iis\/\">https:\/\/blogs.msdn.microsoft.com\/friis\/2010\/04\/01\/application-de-test-pour-gnrer-des-dumps-iis\/<\/a> (French IIS\/Azure Support Team)<\/li>\n<li><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/bb397417.aspx\">https:\/\/msdn.microsoft.com\/en-us\/library\/bb397417.aspx<\/a> (I used this code to generate my dump used in the screenshot above)<\/li>\n<\/ul>\n<\/form>\n<\/div>\n<div align=\"justify\">\n<div id=\"scid:9D7513F9-C04C-4721-824A-2B34F0212519:c1f95f3f-321b-485a-b999-8953af3c1811\" class=\"wlWriterEditableSmartContent\" style=\"float: none; margin: 0px; padding: 0px;\"><\/div>\n<\/div>\n<p align=\"justify\">Laurent.<\/p>\n<div align=\"justify\">\n<hr \/>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>English version [MAJ 24\/06\/2016] Il y a quelques semaines un de mes coll\u00e8gues (Merci Julien !), m&rsquo;a fait d\u00e9couvrir PowerDbg. PowerDbg est une librairie PowerShell [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":2463,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,15,7,19],"tags":[25,39,44],"class_list":["post-775","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-debug","category-iis","category-powershell","tag-iis","tag-powershell","tag-windbg"],"_links":{"self":[{"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/posts\/775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/comments?post=775"}],"version-history":[{"count":8,"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/posts\/775\/revisions"}],"predecessor-version":[{"id":2889,"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/posts\/775\/revisions\/2889"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/media\/2463"}],"wp:attachment":[{"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/media?parent=775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/categories?post=775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/laurentvanacker.com\/index.php\/wp-json\/wp\/v2\/tags?post=775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}