public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael D Kinney" <michael.d.kinney@intel.com>
To: "Gao, Liming" <liming.gao@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>,
	"KILIAN_KEGEL@OUTLOOK.COM" <KILIAN_KEGEL@OUTLOOK.COM>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>
Cc: "Richardson, Brian" <brian.richardson@intel.com>,
	"Ni, Ray" <ray.ni@intel.com>
Subject: Re: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()
Date: Wed, 30 Oct 2019 16:16:20 +0000	[thread overview]
Message-ID: <E92EE9817A31E24EB0585FDF735412F5B9DF540A@ORSMSX113.amr.corp.intel.com> (raw)
In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E534D71@SHSMSX104.ccr.corp.intel.com>

[-- Attachment #1: Type: text/plain, Size: 6094 bytes --]

Liming,

This may be something that is better with a command line option when WinHost.exe is started instead of a PCD.

I also think there is a way to run VS first and start a process from VS and do an initial BP.  Does that work with latest Windows 10?

Mike

From: Gao, Liming <liming.gao@intel.com>
Sent: Wednesday, October 30, 2019 8:03 AM
To: devel@edk2.groups.io; KILIAN_KEGEL@OUTLOOK.COM
Cc: Richardson, Brian <brian.richardson@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: RE: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()

Kilian:
 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.

Can you submit BZ for this request, and prepare the patch for the change?

Thanks
Liming
From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>> On Behalf Of Kilian Kegel
Sent: Wednesday, October 30, 2019 5:17 PM
To: Gao, Liming <liming.gao@intel.com<mailto:liming.gao@intel.com>>; devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Cc: Richardson, Brian <brian.richardson@intel.com<mailto:brian.richardson@intel.com>>; Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>
Subject: Re: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()

Hi Liming,

CpuBreakPoint() is the same as __debugbreak() on Microsoft Compiler and generates INT 3 DebugTrap.

Yes, that procedure has worked in the past and I have used it in the same way as you do.

But with newer Windows versions, Windows just terminates the "exceptional" process that emits
INT 3 or any other violation trap and does not offer to debug the process - surly for security reasons...

For debugging purpose on newer Windows 10 versions I always insert the code snippet  below.

It gives the developer the chance to connect VS to the process to be debugged, while waiting on keyboard input.
(ALT-CTRL-P attach to process)

After that, with the debuggee is connected to VS _before_ the debug trap appears. VS is now
available for debugging the process with full source code.

The EmulatorPkg (and Nt32Pkg) was the most helpful tool to understand and debug UEFI internals for me.

EmulatorPkg should also usable and helpful for other devolpers.
Can you please insert the code snippet into main() from WinHost.c?

Thanks,
Kilian


From: Gao, Liming<mailto:liming.gao@intel.com>
Sent: Wednesday, October 30, 2019 06:33 AM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; KILIAN_KEGEL@OUTLOOK.COM<mailto:KILIAN_KEGEL@OUTLOOK.COM>
Cc: Richardson, Brian<mailto:brian.richardson@intel.com>; Kinney, Michael D<mailto:michael.d.kinney@intel.com>
Subject: RE: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()

Kilian:
   I normally modify the source code and insert CpuBreakpoint() function. That will trig VS debugger for the source code.

Thanks
Liming
From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> [mailto:devel@edk2.groups.io] On Behalf Of Kilian Kegel
Sent: Monday, October 28, 2019 9:01 PM
To: Gao, Liming <liming.gao@intel.com<mailto:liming.gao@intel.com>>
Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Richardson, Brian <brian.richardson@intel.com<mailto:brian.richardson@intel.com>>; Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>
Subject: [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak()

Hi Liming,

If have observed in newer Windows 10 versions, when using __debugbreak()in any
application that Windows just terminates the app, instead offering to debug it.
So in WinHost.exe too.

That's why I usually insert the code snippet below to run into getchar()
when the program was started with the /debug command line switch.
As long as the App waits for the next keystroke, I can start the debugger (VS2019)
and connect to WinHost.exe process for debugging.

Do you have a better solution without modifying the source code?

Thanks,
Kilian
    if(1){
        int i;

        SecPrint ("######################################################################################################\n");
        SecPrint ("add \"/debug\" command line switch, to connect to the debugger at the very beginning of POST emulation\n");
        SecPrint ("######################################################################################################\n");

        if(Argc > 1){
            for(i = 1 ; i < Argc ; i++){
                if(0 == strcmp("/debug", Argv[i])){
                        //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");
                        SecPrint("\t1. start Visual Studio\n");
                        SecPrint("\t2. DEBUG->ATTACH TO PROCESS (CTRL + ALT + P) --> WinHost.exe\n");
                        SecPrint("\t3. Break All  (CTRL + ALT + Break) --> WinHost.exe\n");
                        SecPrint("\t4. SET A SOFTWARE BREAKPOINT (F9) in line 445\n");
                        SecPrint("\t5. and press ENTER in this command box\n");
                        SecPrint("\t6. go back to Visual Studio an RUN/SINGLE STEP the application\n");
                        SecPrint("\t7. otherwise press enter to continue...\n");
                        getchar();
                        //
                        // 1. SET A SOFTWARE BREAKPOINT TO THE NEXT LINE of code below -->> SecPrint("");
                        // 2. switch to the command box and press ENTER
                        // 3. start single stepping the entire boot/emulation process, good luck...
                        //
                        SecPrint("");//now you can single step the entire boot/emulation process, good luck...
                   }
            }
        }
    }



[-- Attachment #2: Type: text/html, Size: 57954 bytes --]

  parent reply	other threads:[~2019-10-30 16:16 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-25  9:24 [edk2-devel] [edk2] If use prebuild tools, not need install python 2.7 anymore? Tiger Liu(BJ-RD)
2019-10-28  5:26 ` Liming Gao
2019-10-28 13:01   ` [edk2-devel] [edk2] [EmulatorPkg] using __debugbreak() Kilian Kegel
2019-10-30  5:33     ` Liming Gao
2019-10-30  9:16       ` Kilian Kegel
2019-10-30 15:03         ` Liming Gao
2019-10-30 15:22           ` Minnow Ware
2019-10-30 15:23             ` Liming Gao
2019-10-30 16:16           ` Michael D Kinney [this message]
2019-10-30 16:56             ` Andrew Fish
2019-11-05 17:36     ` [edk2-devel] [[PATCH 1/1]] EmulatorPkg using CpuBreakPoint Kilian Kegel
2019-11-13  1:06       ` Liming Gao
2019-11-13  2:27         ` Ni, Ray
2019-11-14  5:23           ` Kilian Kegel
2019-11-14  6:57             ` Ni, Ray
2019-11-15  9:56               ` Kilian Kegel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E92EE9817A31E24EB0585FDF735412F5B9DF540A@ORSMSX113.amr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox