<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://zine.net.pl/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>No comments...</title><link>http://zine.net.pl/blogs/bysza/default.aspx</link><description /><dc:language /><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Szacunek dla organizatorów MTS 2009 :)</title><link>http://zine.net.pl/blogs/bysza/archive/2009/09/29/Szacunek-dla-organizatorow-MTS-2009.aspx</link><pubDate>Tue, 29 Sep 2009 15:50:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:4217</guid><dc:creator>Bysza</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/4217.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=4217</wfw:commentRss><description>Moje pozytywne wrażenia po MTS 2008 przyćmiła organizacja imprezy.&lt;br&gt;Jak wiadomo, człowiek może odpowiednio docenić wrażenia wyższego poziomu dopiero wtedy, gdy niższe potrzeby są zaspokojone.&lt;br&gt;O to w 2008 roku było niełatwo.&lt;br&gt;&lt;br&gt;Co innego MTS 2009. Już po 1. dniu mogę spokojnie stwierdzić że konferencja jest bardzo udana.&lt;br&gt;Organizacja imprezy na bardzo wysokim poziomie. Pozwala to skupić się na aspektach technicznych i wartości merytorycznej sesji, nie pozostawiając miejsca na marudzenie :)&lt;br&gt;&lt;br&gt;Sesje Tomka Onyszko i Johna Craddock'a wspaniałe.&lt;br&gt;&lt;br&gt;Chylę czoła organizatorom i serdecznie pozdrawiam, gratulując bardzo udanego eventu.&lt;br&gt;&lt;br&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=4217" width="1" height="1"&gt;</description></item><item><title>TFS Web Access 2010 w języku polskim przed RTM?</title><link>http://zine.net.pl/blogs/bysza/archive/2009/07/21/tfs-web-access-2010-w-j-zyku-polskim-przed-rtm.aspx</link><pubDate>Mon, 20 Jul 2009 22:28:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:4044</guid><dc:creator>Bysza</dc:creator><slash:comments>3</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/4044.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=4044</wfw:commentRss><description>Trwają prace nad VSTS 2010, czas zatem zainteresować się lokalizacją Web Access dla TFS.&lt;br&gt;&lt;br&gt;Najprawdopodobniej przed ukazaniem się wersji Beta 2, uda się wyciągnąć odpowiednie materiały z MS tak, by można było przygotować lokalizację dedykowaną dla tej wersji.&lt;br&gt;&lt;br&gt;Jak będzie zobaczymy, natomiast wszystkie znaki wskazują na to, że wraz z ukazaniem się wersji RTM, dostępna będzie również polska wersja narzędzia TFS Web Access 2010.&lt;br&gt;&lt;br&gt;Tak w ogóle to mam pytanie: czy ktoś z Was używa zlokalizowanej wersji w swoim TFS 2008? ;)&lt;br&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=4044" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/TFS/default.aspx">TFS</category></item><item><title>VSTS Database Edition dostępna za darmo dla posiadaczy VSTS Team Developer.</title><link>http://zine.net.pl/blogs/bysza/archive/2008/11/23/vsts-database-edition-dost-pna-za-darmo-dla-posiadaczy-vsts-team-developer.aspx</link><pubDate>Sun, 23 Nov 2008 21:30:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2479</guid><dc:creator>Bysza</dc:creator><slash:comments>2</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/2479.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=2479</wfw:commentRss><description>Nie wiem jak udało mi się przeoczyć zdarzenie, na które liczyłem od ponad roku.&lt;br&gt;No i stało się to ponad miesiąc temu!&lt;br&gt;&lt;br&gt;Liczyłem że edycja Visual Studio for Database Professionals będzie dostępna dla tych, którzy posiadają wersję Team Developer.&lt;br&gt;Podział na dwa produkty był sztuczny. Ile projektów opiera się tylko o kod .net, nie dotykając bazy danych?&lt;br&gt;Problemy z:&lt;br&gt;&lt;ul&gt;&lt;li&gt;wersjonowaniem schematu? &lt;/li&gt;&lt;li&gt;refaktoryzacją? &lt;/li&gt;&lt;li&gt;porównywaniem schematów? &lt;/li&gt;&lt;li&gt;testami jednostkowymi bazy danych...?&lt;/li&gt;&lt;/ul&gt;Te i wiele innych problemów jest zaadresowanych w VSTS Database Edition.&lt;br&gt;&lt;br&gt;Wszyscy dotychczasowi użytkownicy VSTS Team Developer wersje 2005 i 2008, mogą ściągnąć z MSDN wersję VSTS Database Edition.&lt;br&gt;Dotyczy to również partnerów MS, którzy poprzez uczestnictwo w programie oraz odpowiednie kompetencje (Custom Development lub ISV) posiadają już VSTS Team Developer.&lt;br&gt;&lt;br&gt;Wszystkie szczegóły "promocji" są dostępne &lt;a href="http://msdn.microsoft.com/pl-pl/vsts2008/products/cc990295%28en-us%29.aspx"&gt;tutaj&lt;/a&gt;.&lt;br&gt;Informacje o produkcie można uzyskać &lt;a href="http://msdn.microsoft.com/pl-pl/vsts2008/db/default.aspx"&gt;tutaj&lt;/a&gt;.&lt;br&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2479" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/Tips/default.aspx">Tips</category></item><item><title>TFS Web Access 2008 dostępny w języku polskim</title><link>http://zine.net.pl/blogs/bysza/archive/2008/11/18/tfs-web-access-2008-dost-pny-w-j-zyku-polskim.aspx</link><pubDate>Tue, 18 Nov 2008 02:03:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2413</guid><dc:creator>Bysza</dc:creator><slash:comments>2</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/2413.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=2413</wfw:commentRss><description>&lt;p&gt;Miło mi poinformować że w ramach projektu Team System Web Access Translations (&lt;a href="http://www.codeplex.com/TSWAL/"&gt;http://www.codeplex.com/TSWAL/&lt;/a&gt;), rozpoczętego przez Marcela de Vries (TFS MVP), opublikowaliśmy wersję 1.0 tłumaczenia Team Foundation Web Access 2008 na język polski, której jestem skromnym autorem.&lt;br&gt;&lt;/p&gt;  &lt;p&gt;Tłumaczenie dotyczy również rozszerzenia WIWA, dostępnego od wersji TFS WA 2008 SP1.&lt;/p&gt;  &lt;p&gt;Poza polskim, dostępne są następujące pakiety lokalizacyjne:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Chorwacki, autor &lt;a href="http://ognjenbajic.com/blog"&gt;Ognjen Bajic&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Portugalski (Brazylijski), autorzy &lt;a href="http://igoravl.spaces.live.com/"&gt;Igor Abade&lt;/a&gt; i &lt;a href="http://blogs.2pc.com.br/ramonduraes"&gt;Ramon Durães&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Turecki, autorzy &lt;a href="http://www.cengizhan.com/"&gt;Cengiz Han&lt;/a&gt;, &lt;a href="http://blogs.infosupport.com/controlpanel/blogs/www.sunali.com"&gt;Coskun Sunali&lt;/a&gt; i &lt;a href="http://www.okantekeli.com/"&gt;Okan Tekeli&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Duński, autor Gert Christiansen &lt;/li&gt;    &lt;li&gt;Szwedzki, autor &lt;a href="http://olausson.net/blog"&gt;Mathias Olausson&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Holenderski, autor &lt;a href="http://blogs.infosupport.com/marcelv"&gt;Marcel de Vries&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Mam nadzieję że polska lokalizacja umożliwi szerszą adopcję tego produktu w Polsce, nie tylko w środowisku deweloperów i specjalistów IT, ale również przez użytkowników końcowych, którym pozwoli na interakcję z systemem w języku ojczystym.&lt;/p&gt;  &lt;p&gt;Liczę że wersja 1.0 tłumaczenia przyda się wielu zespołom. Zachęcam do dyskusji na temat zwrotów przyjętych w tłumaczeniu i zgłaszania uwag. Nieczęsto można&amp;nbsp; wpłynąć na to, w jaki sposób przetłumaczony jest produkt Microsoftu.&lt;/p&gt;  &lt;p&gt;Gratulacje dla wszystkich członków zespołu i Marcela, za wykazanie inicjatywy i wydobycie plików źródłowych z Microsoftu. &lt;/p&gt;  &lt;p&gt;Odnośniki do notek &lt;a href="http://blogs.infosupport.com/marcelv/archive/2008/11/17/First-release-of-Team-System-Web-Access-Translations-now-available_2100_.aspx"&gt;Marcela de Vries&lt;/a&gt; i &lt;a href="http://blogs.msdn.com/bharry/archive/2008/11/17/community-translations-of-team-system-web-access.aspx"&gt;Briana Harry’ego&lt;/a&gt; na temat udostępnienia v1 pakietu lokalizacyjnego. &lt;br&gt;&lt;/p&gt;  &lt;p&gt;&lt;br&gt;Instalacja pakietu lokalizacyjnego jest bardzo prosta:&lt;/p&gt;  &lt;p&gt;1. Pobrać instalator w pliku MSI z &lt;a href="http://www.codeplex.com/TSWAL/Release/ProjectReleases.aspx?ReleaseId=18055"&gt;http://www.codeplex.com/TSWAL/Release/ProjectReleases.aspx?ReleaseId=18055&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Uruchomić plik MSI na serwerze, na którym zainstalowany jest Team System Web Access 2008 lub wyżej.&lt;/p&gt;  &lt;p&gt;3. Zrestartować pulę aplikacyjną, w której działa TSWA, lub zrestartować IISa.&lt;/p&gt;  &lt;p&gt;Po zainstalowaniu, system powinien automatycznie rozpoznać używaną w przeglądarce wersję językową i dostosować do niej interfejs użytkownika.&lt;/p&gt;  &lt;p&gt;Alternatywną metodą jest ręczne wymuszenie języka, poprzez menu Settings -&amp;gt; Profile -&amp;gt; Options, a następnie przejście do zakładki Regional settings i ustawienie żądanego języka.&lt;/p&gt;    &lt;p&gt;Poniżej prezentuję kilka zrzutów ekranu, prezentujących interfejs w języku polskim. Proszę zwrócić uwagę że z powodu angielskiej wersji metodyki zainstalowanej w TFS, niektóre słowa mogą być wyświetlane w języku angielskim i są one niezależne od wersji językowej TFS WA:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TFWA-pl-screen1_2.png"&gt;&lt;img style="border:0px none;" alt="TFWA-pl-screen1" src="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TFWA-pl-screen1_thumb.png" width="889" border="0" height="635"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TSWA-pl-screen2_2.png"&gt;&lt;img style="border:0px none;" alt="TSWA-pl-screen2" src="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TSWA-pl-screen2_thumb.png" width="891" border="0" height="485"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TSWA-pl-screen3_2.png"&gt;&lt;img style="border:0px none;" alt="TSWA-pl-screen3" src="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TSWA-pl-screen3_thumb.png" width="892" border="0" height="577"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TSWA-pl-screen4_2.png"&gt;&lt;img style="border:0px none;" alt="TSWA-pl-screen4" src="http://zine.net.pl/blogs/bysza/WindowsLiveWriter/563e146abbe7_2936/TSWA-pl-screen4_thumb.png" width="893" border="0" height="514"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2413" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/TFS/default.aspx">TFS</category></item><item><title>Lokalizacja TFS Web Access 2008 na język polski</title><link>http://zine.net.pl/blogs/bysza/archive/2008/11/13/lokalizacja-tfs-web-access-2008-na-j-zyk-polski.aspx</link><pubDate>Thu, 13 Nov 2008 15:30:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2392</guid><dc:creator>Bysza</dc:creator><slash:comments>5</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/2392.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=2392</wfw:commentRss><description>Czy ktoś zauważył że nie mamy zlokalizowanego TFS Web Access na język polski?&lt;br&gt;To nieładnie ze strony MS, że pomija tak ważny kraj w Europie Centralnej, pełen wspaniałych i inteligentnych ludzi :)&lt;br&gt;&lt;br&gt;Skoro MS nas nie docenia, to nie ma co lamentować, tylko wziąść się za robotę i nikogo nie prosząc zrobić to samemu.&lt;br&gt;Niestety nie zauważyłem wielu chętnych, zatem postanowiłem dołączyć się do projektu TSWAL na CodePlex i zrobić to tłumaczenie.&lt;br&gt;&lt;br&gt;I tutaj mam mały problem, bynajmniej nie związany z brakiem rąk do pracy, tylko z tłumaczniem niektórych zwrotów.&lt;br&gt;Może zechcielibyście dopomóc i wrzucić Wasze propozycje?&lt;br&gt;Swoich specjalnie nie publikuję, by nikogo nie sugerować.&lt;br&gt;&lt;br&gt;Oto problematyczne pojęcia:&lt;br&gt;&lt;ul&gt;&lt;li&gt;check-in&lt;/li&gt;&lt;li&gt;check-out&lt;/li&gt;&lt;li&gt;changeset&lt;/li&gt;&lt;li&gt;shelve&lt;/li&gt;&lt;li&gt;shelveset&lt;/li&gt;&lt;li&gt;work item&lt;/li&gt;&lt;li&gt;build&lt;/li&gt;&lt;li&gt;bug&lt;/li&gt;&lt;li&gt;quality requirement&lt;/li&gt;&lt;/ul&gt;Będę wdzięczny za propozycje :)&lt;br&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2392" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/TFS/default.aspx">TFS</category></item><item><title>[EN] PDC 2008 sessions available on the net</title><link>http://zine.net.pl/blogs/bysza/archive/2008/11/02/en-pdc-2008-sessions-available-on-the-net.aspx</link><pubDate>Sun, 02 Nov 2008 21:20:33 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2321</guid><dc:creator>Bysza</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/2321.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=2321</wfw:commentRss><description>&lt;p&gt;I took some time to select and group PDC 2008 sessions available on the net &amp;#8211; usually on Channel9 &amp;#8211; because existing search and filtering did not fit my needs.&lt;/p&gt;  &lt;p&gt;Basically I wanted to select just the sessions that I was most interested with, but after some time the list went just too big, so finally I have included almost all of them. Enjoy... :-)&lt;/p&gt;  &lt;h3&gt;Web technologies&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC20/"&gt;ASP.NET 4.0 Roadmap&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC32/"&gt;ASP.NET AJAX Futures&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC21/"&gt;ASP.NET MVC: A New Framework for Building Web Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC33/"&gt;Microsoft Visual Studio: Easing ASP.NET Web Deployment&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC31/"&gt;ASP.NET and JQuery&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES06/"&gt;Developing with Microsoft .NET and ASP.NET for Server Core &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC41/"&gt;ASP.NET: Cache Extensibility&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL48/"&gt;Microsoft Visual Studio: Web Development Futures&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC12/"&gt;Deep Dive: The New Rendering Engine in Microsoft Internet Explorer 8 &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC53/"&gt;Building High Performance JScript Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES14/"&gt;IIS 7.0 and Beyond: The Microsoft Web Platform Roadmap&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES15/"&gt;Web Application Packaging and Deployment&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Future &amp;amp; plans&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC32/"&gt;ASP.NET AJAX Futures&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL48/"&gt;Microsoft Visual Studio: Web Development Futures&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB14/"&gt;SQL Services: Futures&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC07/"&gt;WPF: Extensible BitmapEffects, Pixel Shaders, and WPF Graphics Futures&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC49/"&gt;Microsoft .NET Framework: CLR Futures&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL20/"&gt;Entity Framework Futures&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL12/"&gt;Future Directions for Microsoft Visual Basic&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL30/"&gt;Microsoft Sync Framework Advances&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;SharePoint&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB53/"&gt;SharePoint Online: Extending Your Service&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB13/"&gt;SharePoint 2007: Creating SharePoint Applications with Visual Studio 2008&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB47/"&gt;SharePoint 2007: Advanced Asynchronous Workflow Messaging&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;SQL Server&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB52/"&gt;SQL Services: Tips and Tricks for High-Throughput Data-Driven Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB16/"&gt;SQL Server 2008: Beyond Relational&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB07/"&gt;SQL Server 2008: Developing Large Scale Web Applications and Services &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB26/"&gt;SQL Server 2008: Business Intelligence and Data Visualization&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB23/"&gt;A Lap around SQL Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB14/"&gt;SQL Services: Futures&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL42/"&gt;Microsoft SQL Server 2008: Powering MSDN&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB37/"&gt;SQL Server 2008: Developing Secure Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB25/"&gt;SQL Server 2008: New and Future T-SQL Programmability&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC40/"&gt;SQL Server Compact: Embedding in Desktop and Device Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB24/"&gt;SQL Server 2008: Deep Dive into Spatial Data&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Silverlight&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC27/"&gt;Microsoft Silverlight, WPF and the Microsoft .NET Framework: Sharing Skills and Code&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC06/"&gt;Deep Dive: Building an Optimized, Graphics-Intensive Application in Microsoft Silverlight &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC35/"&gt;Silverlight Controls Roadmap&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC29/"&gt;Microsoft Silverlight 2: Control Model&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC47/"&gt;Microsoft Expression Blend: Tips &amp;amp; Tricks&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;WCF&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL38/"&gt;WCF: Zen of Performance and Scale &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL06/"&gt;WCF 4.0: Building WCF Services with WF in Microsoft .NET 4.0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL35/"&gt;WCF: Developing RESTful Services&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;WPF&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC07/"&gt;WPF: Extensible BitmapEffects, Pixel Shaders, and WPF Graphics Futures&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC45/"&gt;WPF: Data-centric Applications Using the DataGrid and Ribbon Controls&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Visual Studio &amp;amp; Team System&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL03/"&gt;Microsoft Visual Studio Team System: Software Diagnostics and Quality for Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL19/"&gt;Microsoft Visual Studio: Bringing out the Best in Multicore Systems&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL52/"&gt;Team Foundation Server 2010: Cool New Features&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL46/"&gt;Microsoft Visual C# IDE: Tips and Tricks&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL47/"&gt;Microsoft Visual Studio Team System: A Lap Around VSTS 2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL59/"&gt;Visual Studio Debugger Tips &amp;amp; Tricks&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL09/"&gt;Agile Development with Microsoft Visual Studio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL37/"&gt;Microsoft Visual Studio Team System: Leveraging Virtualization to Improve Code Quality with Team Lab&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL26/"&gt;Parallel Programming for Managed Developers with the Next Version of Microsoft Visual Studio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL04/"&gt;Microsoft Visual Studio Team System Team Foundation Server: How We Use It at Microsoft&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL32/"&gt;Microsoft Visual Studio: Customizing and Extending the Development Environment&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;.Net Framework &amp;amp; C#&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL16/"&gt;The Future of C#&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL24/"&gt;Improving .NET Application Performance and Scalability&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL02/"&gt;Under the Hood: Advances in the .NET Type System&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL49/"&gt;Microsoft .NET Framework: Overview and Applications for Babies&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC49/"&gt;Microsoft .NET Framework: CLR Futures&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC54/"&gt;Mono and .NET&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL36/"&gt;Microsoft .NET Framework: Declarative Programming Using XAML&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL34/"&gt;Managed and Native Code Interoperability: Best Practices&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Design &amp;amp; architecture&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB54/"&gt;Designing Your Application to Scale&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC58/"&gt;Framework Design Guidelines&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL57/"&gt;Panel: The Future of Programming Languages&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB02/"&gt;Architecture of the .NET Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL15/"&gt;Architecture without Big Design Up Front&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/SYMP02/"&gt;Parallel Symposium: Application Opportunities and Architectures&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC39/"&gt;Inside the Olympics: An Architecture and Development Review&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB59/"&gt;Behind the Scenes: How We Built a Multi-Enterprise Supply Chain Application&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Programming &amp;amp; quality&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL61/"&gt;Panel: The Future of Unit Testing&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL60/"&gt;Improving Code Quality with Code Analysis&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL58/"&gt;Research: Concurrency Analysis Platform and Tools for Finding Concurrency Bugs&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES09/"&gt;Enabling Test Automation Using Windows Server 2008 Hyper-V&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/SYMP01/"&gt;Parallel Symposium: Addressing the Hard Problems with Concurrency&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL51/"&gt;Research: Contract Checking and Automated Test Generation with Pex&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Velocity&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL14/"&gt;Project &amp;quot;Velocity&amp;quot;: A First Look&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL56/"&gt;Project &amp;quot;Velocity&amp;quot;: Under the Hood&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Windows Azure&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES16/"&gt;A Lap Around Windows Azure&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB01/"&gt;A Lap Around the Azure Services Platform&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;WF&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL17/"&gt;WF 4.0: A First Look&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL21/"&gt;WF 4.0: Extending with Custom Activities&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL06/"&gt;WCF 4.0: Building WCF Services with WF in Microsoft .NET 4.0&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Windows 7&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC16/"&gt;Windows 7: Empower users to find, visualize and organize their data with Libraries and the Explorer&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC42/"&gt;Windows 7: Deploying Your Application with Windows Installer (MSI) and ClickOnce&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;   &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL30/"&gt;&lt;/a&gt;&lt;/p&gt; Miscellaneous&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB32/"&gt;Microsoft Dynamics CRM: Building Line-of-Business Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES24/"&gt;PowerShell: Creating Manageable Web Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/PC17/"&gt;Developing for Microsoft Surface&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES10/"&gt;Developing Solutions for Windows Server 2008 Hyper-V Using WMI&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES13/"&gt;How to Develop Supercomputer Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL08/"&gt;Offline-Enabled Data Services and Desktop Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB45/"&gt;Office Communications Server 2007 R2: Enabling Unified Communications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES32/"&gt;Microsoft Application Virtualization 4.5&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/BB38/"&gt;.NET Services: Connectivity, Messaging, Events, and Discovery with the Service Bus&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL50/"&gt;Research: BAM, AjaxScope, and Doloto&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2321" width="1" height="1"&gt;</description></item><item><title>TFS 2010 (Rosario) features</title><link>http://zine.net.pl/blogs/bysza/archive/2008/11/02/tfs-2010-rosario-features.aspx</link><pubDate>Sat, 01 Nov 2008 23:49:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2318</guid><dc:creator>Bysza</dc:creator><slash:comments>2</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/2318.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=2318</wfw:commentRss><description>Channel9 opublikował kilka ciekawych pozycji na temat TFS 2010.&lt;br&gt;Wszystkie nagrania pochodzą z PDC 2008:&lt;br&gt;&lt;ol&gt;&lt;li&gt;&lt;a id="ctl00_MainPlaceHolder_TitleLink" href="http://channel9.msdn.com/pdc2008/TL47/"&gt;Microsoft Visual 
Studio Team System: A Lap Around VSTS 2010&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="ctl00_MainPlaceHolder_TitleLink" href="http://channel9.msdn.com/pdc2008/TL52/"&gt;Team Foundation 
Server 2010: Cool New Features&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="ctl00_MainPlaceHolder_TitleLink" href="http://channel9.msdn.com/pdc2008/TL03/"&gt;Microsoft Visual 
Studio Team System: Software Diagnostics and Quality for Services&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;Właśnie udostępniono uaktualnioną wersję Visual Studio 2010 September 2008 CTP w wersji VPC, do ściągnięcia &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=922b4655-93d0-4476-bda4-94cf5f8d4814&amp;amp;DisplayLang=en"&gt;tutaj&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Ten release będzie duży, w przeciwieństwie do TFS 2005 -&amp;gt; 2008. &lt;br&gt;Masa nowej funkcjonalności, którą lepiej zobaczyć na własne oczy, niż o niej czytać ;)&lt;br&gt;Dlatego polecam powyższe nagrania.&lt;br&gt;&lt;br&gt;Dodatkowo warto obejrzeć:&lt;br&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://channel9.msdn.com/pdc2008/TL51/"&gt;Research: Contract Checking and Automated Test Generation with Pex&lt;/a&gt;, gdzie prezenterzy Mike Barnett (ten od &lt;a href="http://research.microsoft.com/SpecSharp/"&gt;Spec#&lt;/a&gt;) i Nikolai Tillmann pokazują projekt Pex.&lt;/li&gt;&lt;li&gt;&lt;a id="ctl00_MainPlaceHolder_TitleLink" href="http://channel9.msdn.com/pdc2008/TL46/"&gt;Microsoft Visual C# 
IDE: Tips and Tricks&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2318" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/TFS/default.aspx">TFS</category></item><item><title>Polecam backupy online. Dla celów prywatnych za darmo.</title><link>http://zine.net.pl/blogs/bysza/archive/2008/10/12/polecam-backupy-online-dla-cel-w-prywatnych-za-darmo.aspx</link><pubDate>Sun, 12 Oct 2008 21:49:17 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2185</guid><dc:creator>Bysza</dc:creator><slash:comments>11</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/2185.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=2185</wfw:commentRss><description>&lt;p&gt;Nie przepadam specjalnie za reklamowaniem produktów, w szczególności nie swoich ;), ale tutaj należy się wyjątek.&lt;/p&gt; &lt;p&gt;Każdy użytkownik komputera zwykle cierpi, gdy szlag trafia jego/jej dane. W szczególności gdy nie były zabezpieczone aktualną kopią zapasową. Z jednej strony chcielibyśmy mieć nasze dane zabezpieczone, z drugiej natomiast, po prostu nam się nie chce. Najfajniej byłoby uzyskać bezpieczeństwo bez wysiłku, automatycznie i za darmo.&lt;/p&gt; &lt;p&gt;Co jeżeli jednak nie mamy odpowiedniego nośnika lub nie chcemy w niego inwestować? Co z dobrymi praktykami, jak&amp;nbsp; szyfrowanie, czy przechowywanie kopii w innym miejscu, niż same dane? Byłoby miło przechowywać nasze dane w profesjonalnie zarządzanym centrum danych, nie martwić się harmonogramem kopii, zmienianiem taśm, nie płacić i być zgodnym ze wszystkimi, zalecanymi praktykami.&lt;/p&gt; &lt;p&gt;Brzmi nieźle, tylko jak to zrobić? Na ratunek przychodzi nam backup online: instalujemy agenta, określamy harmonogram, zakres danych i nakazujemy kopiowanie przez internet naszych cennych zasobów do centrum danych po drugiej stronie Atlantyku.&lt;/p&gt; &lt;p&gt;Od 17. marca 2008 testuję jedno z takich rozwiązań: &lt;a href="http://mozy.com/home" target="_blank"&gt;mozy home&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Z całą odpowiedzialnością mogę polecić to rozwiązanie wszystkim. Działa ono jak każde dobre narzędzie - człowiek momentalnie się przyzwyczaja i zupełnie zapomina o jego istnieniu. Jak z prądem elektrycznym: ono po prostu jest :)&lt;/p&gt; &lt;p&gt;Rejestracja konta użytkownika i instalacja oprogramowania jest bardzo prosta. Oprogramowanie od początku działało bez zarzutu, nawet na mojej Viście 64bit. Wystarczy wejść na &lt;a title="https://mozy.com/registration/free" href="https://mozy.com/registration/free"&gt;https://mozy.com/registration/free&lt;/a&gt; i zarejestrować konto. Potem ściągnąć oprogramowanie, zainstalować je, określić zakres danych i politykę szyfrowania. Możemy użyć klucza przechowywanego w centrum danych, lub wskazać własny i martwić się o niego samemu.&lt;/p&gt; &lt;p&gt;Odtwarzanie danych jest intuicyjne. Całość integruje się z powłoką Windows i jest za darmo do użytku prywatnego. Możemy wykorzystać maksymalnie 2 GB, ale powiększenie nie jest trudne: każdy może wskazać zaprzyjaźnione osoby jako referencje. Wtedy obie strony otrzymują po 250 MB więcej.&lt;/p&gt; &lt;p&gt;Wydajności rozwiązania niewiele można zarzucić. Pierwszy backup jest duży, bo kopiuje wszystko co zaznaczyliśmy, ale kolejne kopie są różnicowe. Wysyłane są tylko te dane, które się zmieniły. W moim przypadku, na 1.2 GB danych pod backupem, dzienna paczka zamyka się średnio w 30 MB.&lt;/p&gt; &lt;p&gt;Jedyne o czym musimy pamiętać to pozostawić komputer na noc (czy kiedy tam sobie chcemy) włączony i podłączony do sieci.&lt;/p&gt; &lt;p&gt;Mam nadzieję że powyższy tip uratuje komuś skórę... :)&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2185" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Diagnostyka wycieków pamięci</title><link>http://zine.net.pl/blogs/bysza/archive/2008/09/24/diagnostyka-wyciek-w-pami-ci.aspx</link><pubDate>Wed, 24 Sep 2008 19:38:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2071</guid><dc:creator>Bysza</dc:creator><slash:comments>2</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/2071.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=2071</wfw:commentRss><description>&lt;p&gt;W poniższym artykule wykorzystano materiały znajdujące się w następujących artykułach Tess: &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/tess/archive/2005/11/25/i-have-a-memory-leak-what-do-i-do-defining-the-where.aspx"&gt;http://blogs.msdn.com/tess/archive/2005/11/25/i-have-a-memory-leak-what-do-i-do-defining-the-where.aspx&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/tess/archive/2005/11/25/dumpheap-stat-explained-debugging-net-leaks.aspx"&gt;http://blogs.msdn.com/tess/archive/2005/11/25/dumpheap-stat-explained-debugging-net-leaks.aspx&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&lt;em&gt;Uwaga: postanowiłem nie tłumaczyć większości pojęć w CLR, np. takich jak „assemblies”, „loader”, „viewstate”, itp. Wychodzą z tego potworki językowe, które wprowadzają tylko zamieszanie i niekoniecznie muszą być wszystkim znane. Jeżeli kogoś razi takie podejście, to z góry przepraszam.&lt;br&gt;Jednocześnie proszę o zwrócenie mi na to uwagi – jeżeli liczba niezadowolonych będzie duża, postaram się ustalić jakiś wspólny mianownik.&lt;/em&gt;  &lt;/p&gt;&lt;p&gt;Rozróżnijmy dwa pojęcia: wyciek pamięci oraz wysokie użycie pamięci.&lt;br&gt;Z wyciekiem pamięci mamy do czynienia gdy zaalokujemy pamięć i zagubimy do niej wskaźnik, co prowadzi do tego, że nie możemy jej zwolnić.  &lt;/p&gt;&lt;p&gt;Dopóki mamy wskaźnik do zaalokowanej pamięci, mówimy o wysokim użyciu pamięci.  &lt;/p&gt;&lt;p&gt;Obie sytuacje mogą być równie złe z naszego punktu widzenia i prowadzić do podobnych skutków, jednak nadal są one różne.  &lt;/p&gt;&lt;p&gt;Dla uproszczenia, w dalszej części artykułu będziemy używać terminu „wyciek pamięci.”  &lt;/p&gt;&lt;p&gt;Wyróżniamy dwa typy wycieków pamięci: &lt;strong&gt;stopniowy&lt;/strong&gt;, gdzie użycie pamięci rośnie w przybliżeniu liniowo, i &lt;b&gt;nagły&lt;/b&gt;. Rozwiązujemy je w podobny sposób, jednak przy nagłym wycieku staramy się znaleźć powiązane, wyjątkowe zdarzenie, które zaszło w chwili wycieku, np. bardzo duże obciążenie serwera, itp.  &lt;/p&gt;&lt;p&gt;Pamięć procesu zawiera wiele różnych bytów, takich jak wątki, zarządzane sterty, zarządzaną stertę loader’a, natywne sterty, biblioteki dll i alokacje wirtualne dokonywane przez obiekty COM, zatem dobrym miejscem by zacząć, jest sprawdzenie w monitorze wydajności następujących liczników:&lt;/p&gt; &lt;table cellpadding="2" cellspacing="0"&gt;  &lt;tr&gt; &lt;td&gt;Process/Virtual Bytes&lt;/td&gt; &lt;td&gt;Ilość zaalokowanej pamięci wirtualnej.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Process/Private Bytes&amp;nbsp;&amp;nbsp; &lt;/td&gt; &lt;td&gt;Ilość zaalokowanej pamięci fizycznej.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;.net CLR Memory/# Bytes in all Heaps&lt;/td&gt; &lt;td&gt;Ilość bajtów we wszystkich stertach.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;.net CLR Memory/% Time in GC&lt;/td&gt; &lt;td&gt;Procent czasu działania aplikacji, spędzony na odśmiecanie.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;.net CLR Memory/Large Object Heap size&lt;/td&gt; &lt;td&gt;Ilość zaalokowanej pamięci na stercie dla dużych obiektów (Large Object Heap - LOH).&lt;br&gt;Duże obiekty to te, których wielkość przekracza 85 000 bajtów.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;.net CLR Loading/Bytes in Loader Heap&lt;/td&gt; &lt;td&gt;Ilość bajtów zaalokowanych na stercie loadera.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;.net CLR Loading/Current Assemblies&lt;/td&gt; &lt;td&gt;Ilość załadowanych assemblies.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;p&gt;Poszukujemy takiej sytuacji, gdzie ilość bajtów prywatnych rośnie w przybliżeniu w tym samym tempie, co ilość bajtów wirtualnych, oraz czy „#Bytes in all Heaps” podąża tą samą ścieżką.  &lt;/p&gt;&lt;p&gt;Jeżeli ilość bajtów prywatnych będzie się zwiększać, ale „#Bytes in all Heaps” pozostanie bez zmian, mamy prawdopodobnie do czynienia z wyciekiem natywnej pamięci, np. z powodu alokacji dokonywanych przez komponenty COM. Jeżeli „#Bytes in all Heaps” zwiększa się w podobnym tempie jak bajty prywatne, wyciek jest zlokalizowany w kodzie zarządzanym.  &lt;/p&gt;&lt;p&gt;Podobnie, jeżeli widać zwiększającą się ilość bajtów wirtualnych, ale bajty prywatne pozostają bez zmian, problemem jest pewnie rezerwacja dużej ilość pamięci wirtualnej, która nie jest później używana.  &lt;/p&gt;&lt;p&gt;Z chwilą uruchomienia procesu i załadowania wszystkich domen aplikacyjnych (appdomains), liczniki „#Bytes in Loader Heap” i „#Current Assemblies” powinny utrzymywać się na niezmienionym poziomie. Jeżeli jednak liczniki te rosną, bardzo prawdopodobny jest wyciek pamięci z assembly loader’a.  &lt;/p&gt;&lt;p&gt;Jeżeli mamy do czynienia z aplikacją w ASP.net, należy sprawdzić w web.config, czy atrybut debug=”false” oraz symptomy, nie są identyczne z opisanymi w artykułach KB: &lt;br&gt;&lt;a href="http://support.microsoft.com/?id=886385"&gt;Memory usage is high when you create several XmlSerializer objects&lt;/a&gt; oraz &lt;a href="http://support.microsoft.com/?id=313997"&gt;Assembly leak because of script blocks in XSLT's&lt;/a&gt;.  &lt;/p&gt;&lt;h3&gt;Użycie WinDbg do debugowania wycieku pamięci zarządzanej&lt;/h3&gt; &lt;p&gt;Najbardziej pomocnym poleceniem WinDbg w przypadku debugowania wycieku pamięci zarządzanej jest !dumpheap. Pokazuje ono listę wszystkich obiektów na zarządzanych stertach, a używając różnych przełączników tego polecenia, możemy formatować wyniki.  &lt;/p&gt;&lt;p&gt;!dumpheap jest poleceniem wbudowanym w rozszerzenie SOS, które otrzymujemy wraz z instalacją .Net Framework. Plik zlokalizowany jest w folderze, w którym zainstalowaliśmy .Net Framework. Jeżeli zainstalowaliśmy SDK v1.1 w domyślnym folderze, podstawowy opis użycia SOS możemy znaleźć w C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\Samples\sos.  &lt;/p&gt;&lt;p&gt;Rozróżniamy dwie kategorie obiektów przechowywanych na stercie:  &lt;/p&gt;&lt;ul&gt; &lt;li&gt;obiekty które są zakorzenione (rooted), np. jakiś obiekt przechowuje do nich wskaźnik (referencję), &lt;br&gt;oraz  &lt;/li&gt;&lt;li&gt;obiekty które zostały właśnie utworzone (młode) lub przestały być zakorzenione od czasu ostatniego odśmiecania.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;By uniknąć przeglądania dużej ilości danych, które i tak zostaną usunięte podczas najbliższego odśmiecania, można posłużyć się pożytecznym trikiem:&lt;br&gt;1. obciążyć aplikację (stress),&lt;br&gt;2. ręcznie wymusić odśmiecanie, wywołując GC.Collect(3),&lt;br&gt;3. wykonać zrzut pamięci procesu (dump),&lt;br&gt;4. obciążyć aplikację (stress) po raz kolejny,&lt;br&gt;5. ręcznie wymusić odśmiecanie, wywołując GC.Collect(3),&lt;br&gt;6. wykonać zrzut pamięci procesu (dump),&lt;br&gt;7. porównać obiekty znajdujące się na stertach w obydwu zrzutach.&lt;/p&gt; &lt;p&gt;Przełącznik &lt;font face="Courier New"&gt;-stat&lt;/font&gt; polecenia &lt;font face="Courier New"&gt;!dumpheap&lt;/font&gt;, pokazuje zestawienie statystyk dotyczących obiektów na stercie:&lt;br&gt;&lt;font face="Courier New"&gt;0:000&amp;gt; !dumpheap -stat&lt;br&gt;0x79c489a0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Runtime.Remoting.Messaging.ClientContextTerminatorSink&lt;br&gt;0x79bf9aec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.IO.TextReader/NullTextReader&lt;br&gt;0x79be7078&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Runtime.Remoting.Proxies.ProxyAttribute&lt;br&gt;0x79bce8e0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Runtime.InteropServices.ComVisibleAttribute&lt;br&gt;0x79bce7c8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.CLSCompliantAttribute&lt;br&gt;0x79bc08e0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Empty&lt;br&gt;0x0618ae68&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Web.Configuration.CustomErrorsConfigHandler&lt;br&gt;0x061887f8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Web.UI.WebControls.UnitConverter&lt;br&gt;0x06180848&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Drawing.ColorConverter&lt;br&gt;0x05dbfbc4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 System.Data.Res&lt;br&gt;&amp;lt;… wycięto …&amp;gt;&lt;br&gt;0x03f1236c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 625&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2,820,896 System.Char[]&lt;br&gt;0x04ad88f4&amp;nbsp;&amp;nbsp;&amp;nbsp; 102,874&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2,880,472 System.Web.UI.ControlCollection&lt;br&gt;0x0469bdf0&amp;nbsp;&amp;nbsp;&amp;nbsp; 156,650&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3,133,000 System.Collections.Specialized.HybridDictionary&lt;br&gt;0x04ad91bc&amp;nbsp;&amp;nbsp;&amp;nbsp; 164,516&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3,290,320 System.Web.UI.Triplet&lt;br&gt;0x03f134a8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7,582&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3,799,704 System.Collections.Hashtable/bucket[]&lt;br&gt;0x04ade5e4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 47,395&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4,549,920 System.Web.UI.WebControls.Label&lt;br&gt;0x061826bc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 58,197&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4,888,548 System.Web.UI.DataBoundLiteralControl&lt;br&gt;0x04adff44&amp;nbsp;&amp;nbsp;&amp;nbsp; 323,119&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5,169,904 System.Web.UI.StateItem&lt;br&gt;0x0618788c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 63,437&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6,089,952 System.Web.UI.WebControls.TableCell&lt;br&gt;0x0469c5c4&amp;nbsp;&amp;nbsp;&amp;nbsp; 309,132&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6,182,640 System.Collections.Specialized.ListDictionary/DictionaryNode&lt;br&gt;0x0011cec0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 305&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6,240,720&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Free&lt;br&gt;0x79ba2ee4&amp;nbsp;&amp;nbsp;&amp;nbsp; 270,831&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6,499,944 System.Collections.ArrayList&lt;br&gt;0x03f16d9c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 222&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7,703,284 System.DateTime[]&lt;br&gt;0x04add34c&amp;nbsp;&amp;nbsp;&amp;nbsp; 105,502&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8,018,152 System.Web.UI.LiteralControl&lt;br&gt;0x0615c6f4&amp;nbsp;&amp;nbsp;&amp;nbsp; 558,019&amp;nbsp;&amp;nbsp;&amp;nbsp; 11,160,380 System.Data.DataRowView&lt;br&gt;0x03f15d1c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3,783&amp;nbsp;&amp;nbsp;&amp;nbsp; 15,447,528 System.Boolean[]&lt;br&gt;0x060bcc74&amp;nbsp;&amp;nbsp;&amp;nbsp; 570,274&amp;nbsp;&amp;nbsp;&amp;nbsp; 22,810,960 System.Data.DataRow&lt;br&gt;0x03f15fd4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 702&amp;nbsp;&amp;nbsp;&amp;nbsp; 50,930,472 System.Decimal[]&lt;br&gt;0x03f131e8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21,013&amp;nbsp;&amp;nbsp;&amp;nbsp; 60,573,352 System.Int32[]&lt;br&gt;0x03f1209c&amp;nbsp;&amp;nbsp;&amp;nbsp; 508,734&amp;nbsp;&amp;nbsp;&amp;nbsp; 75,399,184 System.Object[]&lt;br&gt;0x79b94638&amp;nbsp; 5,286,303&amp;nbsp;&amp;nbsp; 697,441,440 System.String&lt;br&gt;Total 9,712,896 objects, Total size: 1,032,127,612&lt;br&gt;&lt;br&gt;&lt;/font&gt;Pierwsza kolumna zawiera identyfikator z tabeli metod danego typu. Jeżeli zrzucimy dane wybranego obiektu, pierwszą wartością DWORD będzie identyfikator tabeli metod, która zawiera wskaźniki do informacji o danym typie, takie jak lista zmiennych składowych, lista implementowanych metod, itp. Tabela metod unikalnie identyfikuje typ.  &lt;/p&gt;&lt;p&gt;Druga kolumna zawiera ilość obiektów danego typu na stercie. W powyższym przykładzie na stercie zaalokowanych jest 5.286.303 obiektów typu string.&lt;br&gt;Trzecia kolumna zawiera całkowity rozmiar pamięci zajmowanych przez te obiekty, zatem nasze stringi zajmują na stercie około 695 MB. Uwaga: całkowity rozmiar obiektów nie zawiera zmiennych składowych.&lt;/p&gt; &lt;p&gt;Rozważmy przykład klasy System.Data.DataSet:&lt;br&gt;&lt;font face="Courier New"&gt;0x060bbd2c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 221&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 17,680 System.Data.DataSet&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Widzimy że na stercie znajduje się 221 obiektów klasy DataSet, które zajmują w sumie 17.680 bajtów, co oznacza że średnio zajmują one 80 bajtów. Jeżeli prezentowana wartość reprezentowałby całkowity rozmiar obiektu data set, byłyby to bardzo małe obiekty. &lt;/p&gt; &lt;p&gt;Jeżeli wyświetlimy listę obiektów klasy DataSet, poprzez polecenie &lt;font face="Courier New"&gt;!dumpheap –mt &amp;lt;tabela metod&amp;gt;&lt;/font&gt;, a następnie wybierzemy jeden z nich i wyświetlimy jego zawartość poprzez &lt;font face="Courier New"&gt;!dumpobj &amp;lt;adres&amp;gt;&lt;/font&gt;, zobaczymy listing podobny do poniższego:  &lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;0:000&amp;gt; !dumpobj 0x3920ed4c&lt;br&gt;Name: System.Data.DataSet&lt;br&gt;MethodTable 0x060bbd2c&lt;br&gt;EEClass 0x060d2614&lt;br&gt;Size 80(0x50) bytes&lt;br&gt;GC Generation: 2&lt;br&gt;mdToken: 0x0200003b&amp;nbsp; (c:\windows\assembly\gac\system.data\1.0.5000.0__b77a5c561934e089\system.data.dll)&lt;br&gt;FieldDesc*: 0x060bb358&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Field&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value Name&lt;br&gt;0x060b252c 0x4000583&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 site&lt;br&gt;0x060b252c 0x4000584&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 events&lt;br&gt;0x060b252c 0x4000582&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static EventDisposed&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value 0x001192a0:NotInit&amp;nbsp; 0x0017fc40:NotInit&amp;nbsp; 0x044b7b28:0x1c357cb8 &amp;lt;&amp;lt;&lt;br&gt;0x060bbd2c 0x40003d3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 defaultViewManager&lt;br&gt;0x060bbd2c 0x40003d4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x3920ee28 tableCollection&lt;br&gt;0x060bbd2c 0x40003d5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x3920ed9c relationCollection&lt;br&gt;0x060bbd2c 0x40003d6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 extendedProperties&lt;br&gt;0x060bbd2c 0x40003d7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x1c357c90 dataSetName&lt;br&gt;0x060bbd2c 0x40003d8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x182d0224 _datasetPrefix&lt;br&gt;0x060bbd2c 0x40003d9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x182d0224 namespaceURI&lt;br&gt;0x060bbd2c 0x40003da&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 0 caseSensitive&lt;br&gt;0x060bbd2c 0x40003db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x14309a0c culture&lt;br&gt;0x060bbd2c 0x40003dc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x41&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 1 enforceConstraints&lt;br&gt;0x060bbd2c 0x40003dd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x42&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 0 fInReadXml&lt;br&gt;0x060bbd2c 0x40003de&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x43&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 0 fInLoadDiffgram&lt;br&gt;0x060bbd2c 0x40003df&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x44&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 0 fTopLevelTable&lt;br&gt;0x060bbd2c 0x40003e0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 0 fInitInProgress&lt;br&gt;0x060bbd2c 0x40003e1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x46&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 1 fEnableCascading&lt;br&gt;0x060bbd2c 0x40003e2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x47&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 0 fIsSchemaLoading&lt;br&gt;0x060bbd2c 0x40003e3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 rowDiffId&lt;br&gt;0x060bbd2c 0x40003e4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x48&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Boolean&amp;nbsp;&amp;nbsp; instance 0 fBoundToDocument&lt;br&gt;0x060bbd2c 0x40003e5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 onPropertyChangingDelegate&lt;br&gt;0x060bbd2c 0x40003e6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 onMergeFailed&lt;br&gt;0x060bbd2c 0x40003e7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x38&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 onDataRowCreated&lt;br&gt;0x060bbd2c 0x40003e8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x3c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp; instance 0x00000000 onClearFunctionCalled&lt;br&gt;0x060bbd2c 0x40003e9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLASS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shared&amp;nbsp;&amp;nbsp; static zeroTables&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;gt; Domain:Value 0x0017fc40:NotInit&amp;nbsp; 0x044b7b28:0x1c357c80 &amp;lt;&amp;lt; &lt;/font&gt; &lt;/p&gt;&lt;p&gt;Wspomniane 80 bajtów wystarczy do przechowania wszystkich wskaźników do zmiennych składowych, ale dane rzeczywiście składowane w DataSet, znajdują się w kolekcji tabel i jej zmiennych składowych. By otrzymać rzeczywisty rozmiar obiektu, włączając w to zmienne składowe tego obiektu, należy użyć polecenia &lt;font face="Courier New"&gt;!objsize &amp;lt;adres&amp;gt;&lt;/font&gt;.  &lt;/p&gt;&lt;p&gt;Zmienne składowe same są obiektami na stercie, zatem w wyniku polecenia &lt;font face="Courier New"&gt;!dumpheap –stat&lt;/font&gt; zostaną one wykazana osobno, a w naszym przypadku, zagregowany rozmiar 1 032 127 612 bajtów, jest rzeczywistym rozmiarem wszystkich obiektów na stertach.  &lt;/p&gt;&lt;p&gt;Niektóre typy, jak string, byte[] czy char[], zawierają rzeczywiste dane w strukturze, co oznacza że całkowity rozmiar wykazany przez &lt;font face="Courier New"&gt;!dumpheap -stat&lt;/font&gt;, będzie taki sam lub bardzo zbliżony do całkowitego rozmiaru obiektów. Z tego powodu oraz z powodu bycia popularnymi typami, w większości przypadków będziemy widzeli je w roli największych okupantów pamięci. W związku z tym, w przypadku poszukiwania wycieków pamięci, bardziej pomocnym może być szukanie wśród obiektów występujących nieco rzadziej.  &lt;/p&gt;&lt;p&gt;W rozważanym przypadku możemy zauważyć ogromną ilość obiektów typu DataRow, zatem dobrym punktem początkowym byłoby znalezienie przyczyny tak dużej ich ilości.  &lt;/p&gt;&lt;p&gt;Duża ilość stringów prawdopodobnie jest składową obiektów DataRow, których na stercie zaalokowano 570.274. Biorąc pod uwagę 221 DataSet’ów, każdy z nich średnio zawiera 2.580 wierszy, co oznacza że są to duże DataSet’y. By tego dowieść, moglibyśmy sprawdzić wielkość kilku wybranych, używając do tego polecenia &lt;font face="Courier New"&gt;!objsize&lt;/font&gt;.  &lt;/p&gt;&lt;p&gt;Kolejną ważną rzeczą są obiekty raportowane jako Free. Nie są to obiekty, a pamięć zwolniona podczas odśmiecania, której jeszcze nie scalono (not compacted). Pamięć ta może być wykorzystana do kolejnych alokacji. Jeżeli zauważymy dużą ilość wpisów reprezentujących wolną pamięć na stercie (Free), możemy mieć do czynienia z problemem przypinania (pinning) obiektów. Precyzując, możemy przyjąć regułę, że jeżeli 30% pamięci na stercie jest raportowana jako wolna (Free), istnieje duże prawdopodobieństwo występowania powyższego problemu, którego dobre wyjaśnienie możemy znaleźć na blogu Moani, pod adresem &lt;a href="http://blogs.msdn.com/maoni"&gt;http://blogs.msdn.com/maoni&lt;/a&gt;.  &lt;/p&gt;&lt;p&gt;Innymi, przydatnymi przełącznikami są: &lt;/p&gt; &lt;table cellpadding="2" cellspacing="0"&gt;  &lt;tr&gt; &lt;td&gt;-mt&lt;/td&gt; &lt;td&gt;zwraca obiekty o wskazanej tabeli metod &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;-type &lt;/td&gt; &lt;td&gt;zwraca obiekty których nazwa pasuje do podanego wzorca &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;-min &lt;/td&gt; &lt;td&gt;zwraca wszystkie obiekty, których rozmiar przekracza podany &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;-fix&lt;/td&gt; &lt;td&gt;zwraca wszystkie obiekty znajdujące się pomiędzy dwoma adresami w pamięci &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;-l &amp;lt;liczba&amp;gt;&lt;/td&gt; &lt;td&gt;zwraca tylko określoną ilość obiektów, podaną w &amp;lt;liczba&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;p&gt;Powyższe przełączniki możemy ze sobą łączyć, np.:&lt;br&gt;&lt;font face="Courier New"&gt;!dumpheap -type String -min 85000&lt;/font&gt;&lt;br&gt;zwróci nam wszystkie obiekty typu String, zaalokowane na stercie dla dużych obiektów (LOH). Rozmiar 85 000 bajtów jest wielkością, która powoduje że obiekt jest alokowany na LOH, zamiast na zwykłej stercie.&lt;br&gt;Przykładowym rezultatem powyższego polecenia będzie:  &lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;0:067&amp;gt; !dumpheap -type String -min 85000&lt;br&gt;Using our cache to search the heap.&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gen&lt;br&gt;0x212d0030 0x79b94638&amp;nbsp;&amp;nbsp; 86,812&amp;nbsp;&amp;nbsp; -1 System.String dDwtMTE0NjcyOTQ4MTt0PDtsPGk8Mz&lt;br&gt;0x222d0030 0x79b94638&amp;nbsp;&amp;nbsp; 86,812&amp;nbsp;&amp;nbsp; -1 System.String dDwtMTE0NjcyOTQ4MTt0PDtsPGk8Mz&lt;br&gt;0x232d0030 0x79b94638&amp;nbsp;&amp;nbsp; 86,688&amp;nbsp;&amp;nbsp; -1 System.String dDwtMTE0NjcyOTQ4MTt0PDtsPGk8Mz&lt;br&gt;Statistics:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Count&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TotalSize Class Name&lt;br&gt;0x79b94638&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 260,312 System.String&lt;br&gt;Total 3 objects, Total size: 260,312&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Oznacza to że na LOH znajdują się 3 stringi, o wielkości odpowiednio 86 812, 86 812 i 86 688 bajtów, reprezentujące tekst o długości około 40 000 znaków, ponieważ każdy znak w .net jest kodowany przy użyciu 2 bajtów (unicode). &lt;/p&gt; &lt;p&gt;Uwaga: ostatnia kolumna wyniku powyższego polecenia, zawiera kilkanaście pierwszych znaków stringu. Warto wiedzieć że stringi zaczynające się od znaków „dDw” są strigami kodowanymi Base64. W większości przypadków, widząc takie stringi, możemy spodziewać się że reprezentują one viewstate. W rozważanym przykładzie, analizowany proces zawiera strony ASP.net o viewstate znaczącej wielkości.&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2071" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/windbg/default.aspx">windbg</category><category domain="http://zine.net.pl/blogs/bysza/archive/tags/Tess/default.aspx">Tess</category></item><item><title>WinDbg – od czego zacząć?</title><link>http://zine.net.pl/blogs/bysza/archive/2008/08/09/windbg-od-czego-zacz.aspx</link><pubDate>Sat, 09 Aug 2008 19:30:46 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:1700</guid><dc:creator>Bysza</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/1700.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=1700</wfw:commentRss><description>&lt;p&gt;Zanim przystąpimy do analizy przypadków publikowanych przez Tess Ferrandez, myślę że przyda nam się wprowadzenie do konfiguracji i podstawowego użycia WinDbg.&lt;/p&gt; &lt;p&gt;W naszych rozważaniach będziemy zajmować się debugowaniem aplikacji zaimplementowanych w kodzie zarządzanym, działających w trybie użytkownika. Debugowanie programów działających w trybie jądra, np. sterowników, jest poza zakresem.  &lt;h2&gt;Konfiguracja WinDbg&lt;/h2&gt; &lt;p&gt;1. Pobrać i zainstalować aktualną wersję WinDbg &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx"&gt;32bit&lt;/a&gt; lub &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx"&gt;64bit&lt;/a&gt;.  &lt;p&gt;2. Założyć folder przeznaczony na pliki symboli, np. c:\debugging\symbols.  &lt;p&gt;3. Zadeklarować globalną zmienną środowiskową o nazwie _NT_SYMBOL_PATH i przypisać jej wartość „srv*c:\debugging\symbols*http://msdl.microsoft.com/download/symbols”.&lt;br&gt;lub&lt;br&gt;Uruchomić WinDbg i wejść do menu "File -&amp;gt; Symbol File Path" i wpisać tam powyższą ścieżkę do symboli.  &lt;p&gt;4. Jeżeli to wymagane, ustawić folder zawierający kod źródłowy w menu "File -&amp;gt; Source File Path."  &lt;p&gt;Powyższa lista w żadnej mierze nie wyczerpuje dostępnych możliwości konfiguracyjnych, lecz pozwala szybko ustawić najbardziej potrzebne opcje i przystąpić do debugowania.  &lt;h2&gt;Debuger&lt;/h2&gt; &lt;h3&gt;Reguły nazewnictwa komend debugera&lt;/h3&gt; &lt;h3&gt;Polecenia&lt;/h3&gt; &lt;p&gt;Standardowe polecenia debugera zwykle zaczynają się od litery, ale mogą również od innych znaków. Służą do kontroli pułapek, przeglądania pamięci, kontroli wątków debugowanego procesu, itp.  &lt;h5&gt;Metapolecenia&lt;/h5&gt; &lt;p&gt;Zawsze rozpoczynają się od znaku „.” (kropki) i służą do sterowania debugerem, np.: .load ładuje bibliotekę rozszerzeniową do aktywnej sesji debugera.  &lt;h5&gt;Polecenia rozszerzone&lt;/h5&gt; &lt;p&gt;Zawsze rozpoczynają się od znaku „!” (wykrzyknik). Zaimplementowane i udostępnione przez biblioteki rozszerzeniowe, np. SOS.dll.  &lt;h2&gt;Debugowanie&lt;/h2&gt; &lt;p&gt;WinDbg umożliwia dwie metody debugowania aplikacji zarządzanych: załadowanie pliku zrzutu lub podłączenie do procesu.  &lt;h5&gt;Pliki zrzutu (crash dump)&lt;/h5&gt; &lt;p&gt;Plik zrzutu zwykle tworzony jest w przypadku wystąpienia nieobsługiwanego wyjątku (Dr Watson 2) lub na żądanie użytkownika. Vista umożliwia utworzenie zrzutu procesu bezpośrednio z Task managera. W innych systemach lub bardziej zaawansowanych przypadkach (np. zrzutu warunkowego), należy użyć jednego z narzędzi pomocniczych jak ADPlus (&lt;a href="http://support.microsoft.com/kb/286350"&gt;http://support.microsoft.com/kb/286350&lt;/a&gt;) lub DebugDiag dla IIS (&lt;a href="http://support.microsoft.com/kb/931370"&gt;http://support.microsoft.com/kb/931370&lt;/a&gt;).  &lt;h5&gt;Podłączanie do procesu&lt;/h5&gt; &lt;p&gt;W przypadku gdy nasza aplikacja jest już uruchomiona, podobnie jak w Visual Studio, możemy podłączyć się debugerem do procesu.  &lt;p&gt;Wyróżniamy tutaj dwa tryby debugowania: inwazyjny i nieinwazyjny.  &lt;p&gt;Tryb inwazyjny wykorzystuje Win32 Debugging API. Pozwala na przejęcie pełnej kontroli nad działaniem aplikacji i użycie wszystkich dostępnych poleceń debugera.  &lt;p&gt;Tryb nieinwazyjny nie powoduje podłączenia się do procesu przy użyciu Win32 Debugging API, tylko wstrzymanie wykonania wszystkich wątków aplikacji i uzyskanie dostępu do pamięci procesu. Ten tryb ma minimalny wpływ na aplikację i jest przydatny np. w przypadku potrzeby podejrzenia aktualnego stanu wykonania, a następnie kontynuacji działania aplikacji. Udostępnia ograniczony zestaw poleceń debugera.  &lt;p&gt;Podłączamy się do procesu poprzez „File -&amp;gt; Attach to process” lub klawisz F6 i wybór procesu który nas interesuje. Debuger domyślnie przyjmuje tryb inwazyjny – by skorzystać z trybu nieinwazyjnego, należy zaznaczyć checkbox „Noninvasive”.  &lt;p&gt;Odłączenie od procesu realizuje polecenie „Debug -&amp;gt; Detach debuggee” lub „Debug -&amp;gt; Stop debugging.”  &lt;h3&gt;Wbudowany help i inne przydatne polecenia&lt;/h3&gt; &lt;p&gt;Rozszerzenie Son of Strike (SOS) jest przeznaczone do interpretacji struktur zarządzanych przez CLR.  &lt;p&gt;Każdy proces .net na wstępie swojego działania, rozwiązuje wersję CLR, którą powinien załadować i ją ładuje. SOS jest powiązany z określoną wersją .net, dlatego zanim przystąpimy do jego ładowania do debugera, należałoby ustalić jaką wersję CLR mamy w debugowanym procesie i jaka jest ścieżka do właściwej wersji SOSa. Jest to nieco uciążliwe, dlatego polecenie:  &lt;p&gt;&lt;font face="Courier New" color="#008000"&gt;.loadby sos mscorwks&lt;/font&gt;  &lt;p&gt;ładuje SOS do debugera, bazując na ścieżce obrazu biblioteki mscorwks (czyli CLRa), znakomicie upraszczając sprawę. Oczywiście do procesu mogła również zostać załadowana biblioteka mscorsvr…  &lt;p&gt;&lt;font face="Courier New" color="#008000"&gt;!help&lt;/font&gt;  &lt;p&gt;Wyświetla listę poleceń dostępnych w SOS.  &lt;p&gt;&lt;font face="Courier New" color="#008000"&gt;!help [nazwa polecenia]&lt;/font&gt;  &lt;p&gt;Wyświetla dokumentację wskazanego polecenia, np. !help GCRoot.  &lt;p&gt;W następnym poście skupimy się na kilku najbardziej przydatnych poleceniach SOS, podłączymy się do małej, przykładowej aplikacji i obejrzymy ją sobie w WinDbg.&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=1700" width="1" height="1"&gt;</description></item><item><title>WinDbg - narzędzie zapomniane przez Boga i ludzi?</title><link>http://zine.net.pl/blogs/bysza/archive/2008/08/06/windbg-narz-dzie-zapomniane-przez-boga-i-ludzi.aspx</link><pubDate>Wed, 06 Aug 2008 20:34:21 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:1692</guid><dc:creator>Bysza</dc:creator><slash:comments>2</slash:comments><comments>http://zine.net.pl/blogs/bysza/comments/1692.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/bysza/commentrss.aspx?PostID=1692</wfw:commentRss><description>&lt;p&gt;WinDbg jest mało znanym, najmniej docenianym i najrzadziej używanym narzędziem do debugowania programów pisanych w kodzie zarządzanym. Zachodzę w głowę dlaczego?&lt;/p&gt; &lt;p&gt;Może dlatego że jest debuggerem opartym o konsolę tekstową? Może na samo wspomnienie że WinDbg służy do debugowania sterowników działających pod Windows? Nie wiem, a chętnie bym się dowiedział ;)&lt;/p&gt; &lt;p&gt;Uważam że nie ma na rynku lepszego debuggera niż WinDbg. Żaden z nich nie daje tak wielu możliwości i kontroli nad tym co się dzieje w systemie. Na dodatek jest do ściągnięcia za darmo w wersji &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx"&gt;32 bitowej&lt;/a&gt; lub &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx"&gt;64 bitowej&lt;/a&gt;. :)&lt;/p&gt; &lt;p&gt;Ucieszyłem się że na C2C 2008, Martin Kulov przedstawił &lt;a href="http://ftp.itcore.pl/C2C/NET/NET02_Kulov_Debug.wmv"&gt;prezentację&lt;/a&gt; nt. tego znakomitego narzędzia. Szkoda tylko że tak krótko i zapewne wielu osobom pozostał niedosyt.&lt;/p&gt; &lt;p&gt;W domenie "pl" nie znalazłem wiele informacji o WinDbg w języku polskim. Może macie jakieś dobre namiary?&lt;/p&gt; &lt;p&gt;Tak czy inaczej, jedym z wątków na tym blogu będzie WinDbg. Postaram się przystępnie pisać o możliwościach jakie daje oraz sposobach rozwiązywania określonych problemów.&lt;/p&gt; &lt;p&gt;Ponieważ należy uczyć się od &lt;a href="http://blogs.msdn.com/tess/default.aspx"&gt;najlepszych&lt;/a&gt; i nie warto wyważać otwartych drzwi, udało mi się uzyskać zgodę Tess Ferrandez na tłumaczenie jej postów na język polski i publikację ich tutaj. Wszędzie gdzie będę uważał za stosowne, dodam swoje komentarze zawierające dodatkowe wyjaśnienia. Będę również publikował przypadki z mojej praktyki.&lt;/p&gt; &lt;p&gt;Mam nadzieję że znajdziecie tutaj coś wartościowego dla siebie :)&lt;/p&gt; &lt;p&gt;Zdrowi.&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=1692" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/bysza/archive/tags/windbg/default.aspx">windbg</category></item></channel></rss>