<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:403183563;
        mso-list-type:hybrid;
        mso-list-template-ids:-584285714 -1 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi Liming,</p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="1">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">when you invoke
<span style="color:red">WINHOST.EXE /debug</span>, it waits for developer input</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">otherwise default behavior</li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">A PCD is needless.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Regards,</p>
<p class="MsoNormal">Kilian</p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> devel@edk2.groups.io <devel@edk2.groups.io> on behalf of Liming Gao <liming.gao@intel.com><br>
<b>Sent:</b> Wednesday, October 30, 2019 4:03:13 PM<br>
<b>To:</b> devel@edk2.groups.io <devel@edk2.groups.io>; KILIAN_KEGEL@OUTLOOK.COM <KILIAN_KEGEL@OUTLOOK.COM><br>
<b>Cc:</b> Richardson, Brian <brian.richardson@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Ni, Ray <ray.ni@intel.com><br>
<b>Subject:</b> Re: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()</font>
<div> </div>
</div>
<style>
<!--
@font-face
        {font-family:SimSun}
@font-face
        {font-family:"Cambria Math"}
@font-face
        {font-family:DengXian}
@font-face
        {font-family:Calibri}
@font-face
        {font-family:SimSun}
@font-face
        {font-family:DengXian}
p.x_MsoNormal, li.x_MsoNormal, div.x_MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
a:link, span.x_MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:visited, span.x_MsoHyperlinkFollowed
        {color:#954F72;
        text-decoration:underline}
p.x_msonormal0, li.x_msonormal0, div.x_msonormal0
        {margin-right:0cm;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
span.x_EmailStyle20
        {font-family:"Calibri",sans-serif;
        color:windowtext}
.x_MsoChpDefault
        {font-size:10.0pt}
@page WordSection1
        {margin:72.0pt 72.0pt 72.0pt 72.0pt}
div.x_WordSection1
        {}
-->
</style>
<div lang="ZH-CN" link="blue" vlink="#954F72">
<div class="x_WordSection1">
<p class="x_MsoNormal"><span lang="EN-US" style="font-size:10.5pt">Kilian:</span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="font-size:10.5pt"> I think this idea is good. It can be enabled when the developer wants to do the source level debug. So, one PCD may be introduced to control the logic. By default, there is no change. When
 PCD is enabled, WinHost will wait for the developer input. </span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="font-size:10.5pt"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="font-size:10.5pt">Can you submit BZ for this request, and prepare the patch for the change?</span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="font-size:10.5pt"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="font-size:10.5pt">Thanks</span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="font-size:10.5pt">Liming</span></p>
<div>
<div style="border:none; border-top:solid #E1E1E1 1.0pt; padding:3.0pt 0cm 0cm 0cm">
<p class="x_MsoNormal"><a name="x______replyseparator"></a><b><span lang="EN-US">From:</span></b><span lang="EN-US"> devel@edk2.groups.io <devel@edk2.groups.io>
<b>On Behalf Of </b>Kilian Kegel<br>
<b>Sent:</b> Wednesday, October 30, 2019 5:17 PM<br>
<b>To:</b> Gao, Liming <liming.gao@intel.com>; devel@edk2.groups.io<br>
<b>Cc:</b> Richardson, Brian <brian.richardson@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com><br>
<b>Subject:</b> Re: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()</span></p>
</div>
</div>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">Hi Liming,</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">CpuBreakPoint() is the same as __debugbreak() on Microsoft Compiler and generates INT 3 DebugTrap.</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">Yes, that procedure has worked in the past and I have used it in the same way as you do.</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">But with newer Windows versions, Windows just terminates the “exceptional” process that emits</span></p>
<p class="x_MsoNormal"><span lang="EN-US">INT 3 or any other violation trap and does not offer to debug the process – surly for security reasons…</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">For debugging purpose on newer Windows 10 versions I always insert the code snippet  below.</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">It gives the developer the chance to connect VS to the process to be debugged, while waiting on keyboard input.</span></p>
<p class="x_MsoNormal"><span lang="EN-US">(ALT-CTRL-P attach to process)</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">After that, with the debuggee is connected to VS _<i>before</i>_ the debug trap appears. VS is now</span></p>
<p class="x_MsoNormal"><span lang="EN-US">available for debugging the process with full source code.</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">The EmulatorPkg (and Nt32Pkg) was the most helpful tool to understand and debug UEFI internals for me.</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">EmulatorPkg should also usable and helpful for other devolpers.</span></p>
<p class="x_MsoNormal"><span lang="EN-US">Can you please insert the code snippet into main() from WinHost.c?</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">Thanks,</span></p>
<p class="x_MsoNormal"><span lang="EN-US">Kilian</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<div style="border:none; border-top:solid #E1E1E1 1.0pt; padding:3.0pt 0cm 0cm 0cm">
<p class="x_MsoNormal"><b><span lang="EN-US">From: </span></b><span lang="EN-US"><a href="mailto:liming.gao@intel.com">Gao, Liming</a><br>
<b>Sent: </b>Wednesday, October 30, 2019 06:33 AM<br>
<b>To: </b><a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>; <a href="mailto:KILIAN_KEGEL@OUTLOOK.COM">
KILIAN_KEGEL@OUTLOOK.COM</a><br>
<b>Cc: </b><a href="mailto:brian.richardson@intel.com">Richardson, Brian</a>; <a href="mailto:michael.d.kinney@intel.com">
Kinney, Michael D</a><br>
<b>Subject: </b>RE: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()</span></p>
</div>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="color:#1F497D">Kilian:</span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="color:#1F497D">   I normally modify the source code and insert CpuBreakpoint() function. That will trig VS debugger for the source code.
</span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="color:#1F497D"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="color:#1F497D">Thanks</span></p>
<p class="x_MsoNormal"><span lang="EN-US" style="color:#1F497D">Liming</span></p>
<div>
<div style="border:none; border-top:solid #E1E1E1 1.0pt; padding:3.0pt 0cm 0cm 0cm">
<p class="x_MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> <a href="mailto:devel@edk2.groups.io">
devel@edk2.groups.io</a> [<a href="mailto:devel@edk2.groups.io">mailto:devel@edk2.groups.io</a>]
<b>On Behalf Of </b>Kilian Kegel<br>
<b>Sent:</b> Monday, October 28, 2019 9:01 PM<br>
<b>To:</b> Gao, Liming <<a href="mailto:liming.gao@intel.com">liming.gao@intel.com</a>><br>
<b>Cc:</b> <a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>; Richardson, Brian <<a href="mailto:brian.richardson@intel.com">brian.richardson@intel.com</a>>; Kinney, Michael D <<a href="mailto:michael.d.kinney@intel.com">michael.d.kinney@intel.com</a>><br>
<b>Subject:</b> [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()</span></p>
</div>
</div>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">Hi Liming,</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">If have observed in newer Windows 10 versions, when using
<b>__debugbreak()</b>in any<b></b></span></p>
<p class="x_MsoNormal"><span lang="EN-US">application that Windows just terminates the app, instead offering to debug it.</span></p>
<p class="x_MsoNormal"><span lang="EN-US">So in WinHost.exe too.</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">That’s why I usually insert the code snippet below to run into
<b>getchar()</b></span></p>
<p class="x_MsoNormal"><span lang="EN-US">when the program was started with the /debug command line switch.</span></p>
<p class="x_MsoNormal"><span lang="EN-US">As long as the App waits for the next keystroke, I can start the debugger (VS2019)</span></p>
<p class="x_MsoNormal"><span lang="EN-US">and connect to WinHost.exe process for debugging.</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">Do you have a better solution without modifying the source code?</span></p>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
<p class="x_MsoNormal"><span lang="EN-US">Thanks,</span></p>
<p class="x_MsoNormal"><span lang="EN-US">Kilian<b></b></span></p>
<p class="x_MsoNormal"><b><span lang="EN-US">    if(1){</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">        int i;</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US"> </span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">        SecPrint ("######################################################################################################\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">        SecPrint ("add \"/debug\" command line switch, to connect to the debugger at the very beginning of POST emulation\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">        SecPrint ("######################################################################################################\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US"> </span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">        if(Argc > 1){</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">            for(i = 1 ; i < Argc ; i++){</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                if(0 == strcmp<span style="color:black">(</span><span style="color:red">"/debug"</span><span style="color:black">,</span><span style="color:red">
</span>Argv[i])){</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        //SecPrint("IF YOU WANT TO DEBUG from the very beginning of the EMULATION:\n\t1. start the TASKMGR\n\t2. connect WinHost.exe to the debugger\n\t3. and press ENTER in this command box\nOR\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("\t1. start Visual Studio\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("\t2. DEBUG->ATTACH TO PROCESS (CTRL + ALT + P) --> WinHost.exe\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("\t3. Break All  (CTRL + ALT + Break) --> WinHost.exe\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("\t4. SET A SOFTWARE BREAKPOINT (F9) in line 445\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("\t5. and press ENTER in this command box\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("\t6. go back to Visual Studio an RUN/SINGLE STEP the application\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("\t7. otherwise press enter to continue...\n");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        <span style="color:red">
getchar();</span></span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        //</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        // 1. SET A SOFTWARE BREAKPOINT TO THE NEXT LINE of code below -->> SecPrint("");</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        // 2. switch to the command box and press ENTER</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        // 3. start single stepping the entire boot/emulation process, good luck...</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        //</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                        SecPrint("");//now you can single step the entire boot/emulation process, good luck...</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">                   }</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">            }</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">        }</span></b></p>
<p class="x_MsoNormal"><b><span lang="EN-US">    }</span></b><span lang="EN-US" style="font-size:10.5pt; font-family:DengXian"></span></p>
<div>
<p class="x_MsoNormal"><span lang="EN-US"> </span></p>
</div>
<div>
<p class="x_MsoNormal"></p>
</div>
</div>

</div>
</body>
</html>

<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>

You receive all messages sent to this group.


<p>

<a target="_blank" href="https://edk2.groups.io/g/devel/message/49676">View/Reply Online (#49676)</a> |


  


|


  
    <a target="_blank" href="https://groups.io/mt/38879075/1813853">Mute This Topic</a>
  

| <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>



<br>

<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |

<a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>

 [edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>