Problem
I'm trying to diagnose a problem starting up an application using JCEF on Mac and it seems like dtruss
is missing system calls from its trace. For example the program always quits after failing to look up 'icudtl.dat', and prints out a log message like this:
[0309/151839:ERROR:icu_util.cc(144)] icudtl.dat not found in bundle
However only occasically do I see the corresponding write call in the dtruss trace. And I have never managed to capture it actually looking for 'icudtl.dat'. Is it possible for dtruss to miss calls? And if so how can I fix that?
Details
Running dtruss like this:
sudo dtruss -f ./program.sh 2> /tmp/trace.txt
In the trace I see the following:
[0309/151839:ERROR:icu_util.cc(144)] icudtl.dat not found in bundle
[0309/151839:FATAL:content_main_runner.cc(721)] Check failed: base::i18n::InitializeICU().
dtrace: 1346 dynamic variable drops with non-empty dirty list
1403/0xd0ba6: psynch_cvwait(0x7FBB82435768, 0x14990100149A00, 0x149900) = 0 0
Then much later the write is actually captured:
1403/0xd0b93: write_nocancel(0x2, "[0309/151839:ERROR:icu_util.cc(144)] icudtl.dat not found in bundle\n\0", 0x44) = 68 0
1403/0xd0b93: open_nocancel("\0", 0x209, 0x1B6) = -1 Err#2
1403/0xd0b93: write_nocancel(0x2, "[0309/151839:FATAL:content_main_runner.cc(721)] Check failed: base::i18n::InitializeICU(). \n\0", 0x5C) = 9
But there is no reference to it trying to look up 'icudtl.dat' at all. Lots of other file IO operations are captured though.