【问题标题】:Can I extract binary data that I can inspect while debugging?我可以提取在调试时可以检查的二进制数据吗?
【发布时间】:2014-11-12 10:37:02
【问题描述】:

我正在调试一个生成 PDF 的应用程序,它被发送到我无法访问的位置。我想要其中一个 PDF 文件的示例。在调试时,我能够在 PDF 的数据存储为字节数组的地方检查适当的对象。

似乎应该可以提取二进制数据,将其保存到文件中,将其称为 .pdf 并查看它。这可能吗?我可以通过几种不同的方式将应用程序拆开,让它将 PDF 输出到浏览器,但这非常混乱,因为它的逻辑被埋得很深。

【问题讨论】:

  • 您的应用程序如何生成 PDF?这在很大程度上取决于 A 相关的 PDF 库和 B 您使用它的方式。例如。 iTextSharp 通常不会将生成的 PDF 的完整图像保存在内存中,而是在这些部分完成后立即将部分流式传输到输出(因此它不会在内存中保存您要求的数据);但在某些应用程序中,此输出流是内存流(然后确实将您要求的数据保存在内存中)。
  • 需要一段时间才能确定它是如何做到的,但关键是在调试过程中pdf数据可以作为字节数组使用
  • 如果有的话,是什么阻止你尝试?
  • 在看到Philip Pittle 的回答之前,一种尝试的方法,因此最初的问题

标签: c# .net vb.net pdf visual-studio-2013


【解决方案1】:

您可以轻松地在代码库的某处添加一个实用方法,该方法使用BinaryWriter 类将字节数组写入磁盘。例如:

[Conditional("DEBUG")]
public static void WriteBytesToTempFile(byte[] fileContent)
{
    var tempFileName = "c:\temp.pdf";

    if (File.Exists(tempFileName))
        File.Delete(tempFileName);

    using (var writer = new BinaryWriter(File.Open(tempFileName, FileMode.Create)))
    {
       writer.Write(fileContent);
    }
 }

当您是调试器时,您可以使用 Visual Studio Immediate Window 调用该方法并传入您的 pdf 字节。

或者您可以直接从您的代码中调用该方法。我添加了Conditional 属性,因此只有在使用“调试”进行编译时才会调用该方法。如果您使用“发布”配置文件进行编译,编译器将省略方法调用。

【讨论】:

  • 这看起来是个不错的解决方案,我试试看。
  • 另外,根据您的执行环境,您可能没有对c:\ 的写入权限。在这种情况下,您可以使用Path.GetTempPath() 写入临时目录。更多信息请看这里:dotnetperls.com/path-gettemppath
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2013-10-15
  • 2015-12-14
  • 2022-06-14
  • 2013-09-27
相关资源
最近更新 更多