[webkit-dev] R: dump-class-layout script not working

Frank Jaeger fjaeger77 at outlook.com
Tue Nov 6 02:26:21 PST 2018

I finally managed to fix it. I was running the script on a VM with development tools installed and running it on a WebKit built from my host machine. The reason I was using this intricate setup was because the script broke completely on my host machine when I tried to run it, giving this error:

Fatal Python error: PyThreadState_Get: no current thread

This actually crashed Python. I couldn't figure out why this was happening so I tried to run it on a semi-clean VM with only dev tools installed, and it was working (i.e. not crashing) but failed for some reason to find the symbols.

At this point I did some more researching on the original crash, and managed to fix it. This is probably caused by having multiple Python versions on your machine, particularly with brew, which messes up your $PATH and the script ends up using some wrong Python dynamic library, which leads to the crash. I fixed this by giving the correct $PATH to the script when launching it:

PATH=/usr/bin ./Tools/Scripts/dump-class-layout --architecture=x86_64 -c Debug JavaScriptCore JSString

This lets me run the script correctly on my host machine, and it works perfectly fine. I really don't know why it was failing in the VM, since I had developer tools installed.

Da: simon.fraser at apple.com <simon.fraser at apple.com> per conto di Simon Fraser <simon.fraser at apple.com>
Inviato: lunedì 5 novembre 2018 20:39
A: Frank Jaeger
Cc: webkit-dev at lists.webkit.org
Oggetto: Re: [webkit-dev] dump-class-layout script not working

I assume you've actually done a debug build?

Your command line works for me:

 100$ $ ./Tools/Scripts/dump-class-layout --architecture=x86_64 -c Debug JavaScriptCore JSString
  +0 < 24> JSString
  +0 <  8>     JSC::JSCell JSC::JSCell
  +0 <  1>         JSC::HeapCell JSC::HeapCell
  +0 <  4>       JSC::StructureID m_structureID
  +4 <  1>       JSC::IndexingType m_indexingTypeAndMisc
  +5 <  1>       JSC::JSType m_type
  +6 <  1>       JSC::TypeInfo::InlineTypeFlags m_flags
  +7 <  1>       JSC::CellState m_cellState
  +8 <  4>   unsigned int m_length
 +12 <  2>   uint16_t m_flags
 +14 <  2>   <PADDING: 2 bytes>
 +16 <  8>     WTF::String m_value
 +16 <  8>         WTF::RefPtr<WTF::StringImpl, WTF::DumbPtrTraits<WTF::StringImpl> > m_impl
 +16 <  8>           WTF::DumbPtrTraits<WTF::StringImpl>::StorageType m_ptr
Total byte size: 24
Total pad bytes: 2
Padding percentage: 8.33 %

BTW you should never work on class layouts in debug builds, since they may be different from shipping.

There are some unit tests for dump-class-layout (they used to be run as part of webkitpy tests, but I think Dan changed that?). Do all the tests pass for you?


On Nov 5, 2018, at 4:02 PM, Frank Jaeger <fjaeger77 at outlook.com<mailto:fjaeger77 at outlook.com>> wrote:

Hi Simon, thanks for your help. I am running the script on macOS Mojave 10.14 and I'm pretty sure I have the lldb python bindings installed. Or otherwise it should fail when importing them at the beginning of the script, right? From what I understood by reading the script's code, it is directly calling into the lldb binding to dump the class layout, and it's failing inside.

As I've said before, the error it gives me implies that the provided framework/class pair has not been found in the image, even though I am sure that the pair is valid and found in the image (e.g. JSC::JSString).
Da: simon.fraser at apple.com<mailto:simon.fraser at apple.com> <simon.fraser at apple.com<mailto:simon.fraser at apple.com>> per conto di Simon Fraser <simon.fraser at apple.com<mailto:simon.fraser at apple.com>>
Inviato: lunedì 5 novembre 2018 14:17
A: Frank Jaeger
Cc: webkit-dev at lists.webkit.org<mailto:webkit-dev at lists.webkit.org>
Oggetto: Re: [webkit-dev] dump-class-layout script not working

Dump-class-layout uses the lldb python bindings. Maybe those are not available on your platform?

I think we’ve only ever tried it on macOS. What platform are you trying on?


On Nov 4, 2018, at 12:43 PM, Frank Jaeger <fjaeger77 at outlook.com<mailto:fjaeger77 at outlook.com>> wrote:

Hello. First of all I'm really sorry if this is the wrong mailing list to post to, webkit-help would have probably been better but it doesn't seem very active.

I run into some problems while trying to use the dump-class-layout script (found in Tools/Scripts/). I built WebKit using the build-webkit script with the --debug flag.

After building, I tried to run the dump-class-layout script with the following arguments:

./Tools/Scripts/dump-class-layout --architecture=x86_64 -c Debug JavaScriptCore JSString

I also tried different frameworks and classes. The script always fails telling me that "no type matches x in y" where x is the class name I used in the run and y is the framework name.

Why is this happening? The script is correctly finding the built and symbolicated framework image, so why is it not working properly? Thanks in advance.
webkit-dev mailing list
webkit-dev at lists.webkit.org<mailto:webkit-dev at lists.webkit.org>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20181106/3c9ce0f1/attachment.html>

More information about the webkit-dev mailing list