<div dir="ltr">For core -> minidump conversion, a Python tool might end up as trivial as:<div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div>process = target.LoadCore(source_core_file)</div></div><div>process.SaveMinidump(output_minidump_file)</div></blockquote><div><br></div><div>Another angle on reusing existing minidump writing code: we could reuse just the minidump file creation from Crashpad (the part which constructs the minidump datastructures and puts together the final minidump file) without the "process parsing" part of Crashpad (since LLDB already covers that)</div><div><br></div><div>If anyone is interested in exploring that, the interface to this low level minidump writing part is <a href="https://chromium.googlesource.com/crashpad/crashpad/+/master/snapshot/process_snapshot.h">crashpad::ProcessSnapshot</a> & the rest of the xxxSnapshot interfaces.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 13, 2018 at 3:33 PM, Jim Ingham <span dir="ltr"><<a href="mailto:jingham@apple.com" target="_blank">jingham@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Greg already wrote a "save_crashlog" Python command that writes the state of the program as a macOS flavor Crashlog file.  It's in examples/Python/crashlog.py.  My guess is he had something similar to that in mind, but writing a mini dump file instead.<br>
<span class="HOEnZb"><font color="#888888"><br>
Jim<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
> On Jun 13, 2018, at 3:20 PM, Leonard Mosescu via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> <br>
> What about the case where you already have a Unix core file and you aren't in a debugger but just want to convert it?  <br>
> <br>
> Just curious, would a small Python script using the LLDB SB API satisfy this requirement? <br>
> <br>
>  We could move all the code for consuming and producing Windows minidumps and Unix / Mach-O corefiles from LLDB down into LLVMCoreFile, write a library like llvm-core that can manipulate or inspect them, then have LLDB use it.  Kill 2 birds with one stone that way IMO.<br>
> <br>
> I like the idea of factoring out reusable subsystems, and I'd love to see something along these lines. Just a word of caution though: the hard part may not be the generation of a "structurally valid" minidump file, but "parsing" and modeling the process state (figuring out the list of modules & memory regions, etc. See the Crashpad implementation for details).<br>
> <br>
> On Wed, Jun 13, 2018 at 3:01 PM, Zachary Turner via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> Yea, I think something like this would actually make a useful llvm utility.  Call it llvm-core or something, and it links against the library LLVMCoreFile.  We could move all the code for consuming and producing Windows minidumps and Unix / Mach-O corefiles from LLDB down into LLVMCoreFile, write a library like llvm-core that can manipulate or inspect them, then have LLDB use it.  Kill 2 birds with one stone that way IMO.<br>
> <br>
> On Wed, Jun 13, 2018 at 2:56 PM Jason Molenda <<a href="mailto:jmolenda@apple.com">jmolenda@apple.com</a>> wrote:<br>
> fwiw I had to prototype a new LC_NOTE load command a year ago in Mach-O core files, to specify where the kernel binary was located.  I wrote a utility to add the data to an existing corefile - both load command and payload - and it was only about five hundred lines of C++.  I didn't link against anything but libc, it's such  a simple task I didn't sweat trying to find an object-file-reader/writer library.  ELF may be more complicated though.  <br>
> <br>
> > On Jun 13, 2018, at 2:51 PM, Zachary Turner via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> > <br>
> > What about the case where you already have a Unix core file and you aren't in a debugger but just want to convert it?  It seems like we could have a standalone utility that did that (one could imagine doing the reverse too).  I'm wondering if it wouldn't be possible to do this as a library or something that didn't have any dependencies on LLDB, that way a standalone tool could link against this library, and so could LLDB.  I think this would improve its usefulness quite a bit.<br>
> > <br>
> > On Wed, Jun 13, 2018 at 2:42 PM Greg Clayton <<a href="mailto:clayborg@gmail.com">clayborg@gmail.com</a>> wrote:<br>
> > The goal is to take a live process (regular process just stopped, or a core file) and run "save_minidump ..." as a command and export a minidump file that can be sent elsewhere. Unix core files are too large to always send and they are less useful if they are not examined in the machine that they were produced on. So LLDB gives us the connection to the live process, and we can then create a minidump file. I am going to create a python module that can do this for us.<br>
> > <br>
> > Greg <br>
> > <br>
> > <br>
> >> On Jun 13, 2018, at 2:29 PM, Zachary Turner via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> >> <br>
> >> Also, if the goal is to have this upstream somewhere, it would be nice to have a tool this be a standalone tool.  This seems like something that you shouldn't be required to start up a debugger to do, and probably doesn't have many (or any for that matters) on the rest of LLDB.<br>
> >> <br>
> >> On Wed, Jun 13, 2018 at 1:58 PM Leonard Mosescu <<a href="mailto:mosescu@google.com">mosescu@google.com</a>> wrote:<br>
> >> That being said, it's not exactly trivial to produce a good minidump. Crashpad has a native & cross-platform minidump writer, that's what I'd start with. <br>
> >> <br>
> >> Addendum: I realized after sending the email that if the goal is to convert core files -> LLDB -> minidump a lot of the complexity found in Crashpad can be avoided, so perhaps writing an LLDB minidump writer from scratch would not be too bad.<br>
> >> <br>
> >> On Wed, Jun 13, 2018 at 1:50 PM, Leonard Mosescu <<a href="mailto:mosescu@google.com">mosescu@google.com</a>> wrote:<br>
> >> The minidump format is more or less documented in MSDN. <br>
> >> <br>
> >> That being said, it's not exactly trivial to produce a good minidump. Crashpad has a native & cross-platform minidump writer, that's what I'd start with.<br>
> >> <br>
> >> On Wed, Jun 13, 2018 at 1:38 PM, Adrian McCarthy via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> >> Zach's right.  On Windows, lldb can produce a minidump, but it just calls out to a Microsoft library to do so.  We don't have any platform-agnostic code for producing a minidump.<br>
> >> <br>
> >> I've also pinged another Googler who I know might be interested in converting between minidumps and core files (the opposite direction) to see if he has any additional info.  I don't think he's on lldb-dev, though, so I'll act as a relay if necessary.<br>
> >> <br>
> >> On Wed, Jun 13, 2018 at 12:07 PM, Zachary Turner via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> >> We can’t produce them, but you should check out the source code of google breakpad / crashpad which can.<br>
> >> <br>
> >> That said it’s a pretty simple format, there may be enough in our consumer code that should allow you to produce them<br>
> >> <br>
> >> <br>
> >> ______________________________<wbr>_________________<br>
> >> lldb-dev mailing list<br>
> >> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> >> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
> >> <br>
> >> <br>
> >> <br>
> >> ______________________________<wbr>_________________<br>
> >> lldb-dev mailing list<br>
> >> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> >> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
> >> <br>
> >> <br>
> >> <br>
> >> ______________________________<wbr>_________________<br>
> >> lldb-dev mailing list<br>
> >> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> >> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
> > <br>
> > ______________________________<wbr>_________________<br>
> > lldb-dev mailing list<br>
> > <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
> <br>
> <br>
> ______________________________<wbr>_________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
> <br>
> <br>
> ______________________________<wbr>_________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
<br>
</div></div></blockquote></div><br></div>