public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: krishnaLee <sssky307@163.com>, edk2-devel@lists.01.org
Subject: Re: Why the DEBUG can't output the full string?
Date: Thu, 1 Feb 2018 17:23:59 +0100	[thread overview]
Message-ID: <d448bc87-6573-37f9-1598-34a4f0faef04@redhat.com> (raw)
In-Reply-To: <20478935.ac13.16150c3aa05.Coremail.sssky307@163.com>

On 02/01/18 10:47, krishnaLee wrote:
> Hi,
> For example,the follow code:
> //-code-start
> ConfigRequestHdr = HiiConstructConfigHdr (&mBlankDrvFormSetGuid, VariableName, PrivateData1->DriverHandle[0]);
> Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);
> ConfigRequest = AllocateZeroPool (Size);
> ASSERT (ConfigRequest != NULL);
> AllocatedRequest = TRUE;
> UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize);
> FreePool (ConfigRequestHdr);
> //-code-end
> 
> 
> I add a debug message at the end of code:
> DEBUG((EFI_D_INFO,"construct-ConfigRequest:%s",ConfigRequest));
> DEBUG((EFI_D_INFO,"\r\n"));
> 
> 
> and the output will be:
> construct-ConfigRequest:GUID=db3b005aa15068459170ebd49e16c47c&NAME=00420044004d0079004900660072004e00560044006100740061&PATH=01041400db3b005aa15068459170ebd49e16c47c7fff0400&OFFSET=0&WIDTH=0000000000
> 
> 
> If I add another debug message at the end of code:
> DEBUG((EFI_D_INFO,"construct-ConfigRequest:"));
> for(UINTN i=0;i<Size;i++)
> {
> DEBUG((EFI_D_INFO,"%c",ConfigRequest[i]));
> }
> DEBUG((EFI_D_INFO,"\r\n"));
> 
> 
> and the output will be:
> construct-ConfigRequest:GUID=db3b005aa15068459170ebd49e16c47c&NAME=00420044004d0079004900660072004e00560044006100740061&PATH=01041400db3b005aa15068459170ebd49e16c47c7fff0400&OFFSET=0&WIDTH=0000000000000052 pa?pr╝ <_<_ 
> 
> 
> my platform:
> win10_x64 + udk2017 + vs2015

Umm, I'm a bit confused by your query.

* First, most DebugLib instances have an internal buffer with fixed size
(for the DebugPrint() function). If you try to log longer messages, they
will be truncated.

For example, in "MdePkg/Library/BaseDebugLibSerialPort/DebugLib.c",
there is:

#define MAX_DEBUG_MESSAGE_LENGTH  0x100

(I don't really understand your situation because the first debug
message that you pasted does *not* look truncated.)


* Second, regarding the trailing garbage. You set "Size" to the number
of *bytes* required for a NUL-terminated CHAR16 config request string,
plus 32 CHAR16 objects. This is then correctly passed to both
AllocateZeroPool() and UnicodeSPrint(). However, in the loop where you
print individual CHAR16 objects, you also count up to the number of
*bytes* -- that's incorrect, the limit should be the number of CHAR16
objects (or the NUL-terminator, of course).

Laszlo


  reply	other threads:[~2018-02-01 16:18 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-01  9:47 Why the DEBUG can't output the full string? krishnaLee
2018-02-01 16:23 ` Laszlo Ersek [this message]
2018-02-01 19:21   ` Andrew Fish
2018-02-02  2:07     ` krishnaLee
2018-02-06  1:52       ` krishnaLee
2018-02-02  1:41   ` Ni, Ruiyu

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=d448bc87-6573-37f9-1598-34a4f0faef04@redhat.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