Closed revolter closed 2 years ago
Well, are the .json files under clang_analyzer
folder? I don't know where your Xcode invocation places them.
I attached the entire project. Where does your Xcode invocation place them?
I changed File > Project Settings... > Per-User Project Settings > Derived Data to Project-relative Location
:
But it still doesn't work:
> ls -al DerivedData/ClangBuildAnalyzerTest/Build/Intermediates.noindex/ClangBuildAnalyzerTest.build/Debug-iphoneos/ClangBuildAnalyzerTest.build/Objects-normal/arm64
Permissions Size User Group Date Modified Name
.rw-r--r-- 497 revolt staff 2020-10-04 19:04 AppDelegate.d
.rw-r--r-- 220 revolt staff 2020-10-04 19:04 AppDelegate.dia
.rw-r--r-- 2.7k revolt staff 2020-10-04 19:04 AppDelegate.json
.rw-r--r-- 26k revolt staff 2020-10-04 19:04 AppDelegate.o
.rw-r--r-- 11 revolt staff 2020-10-04 19:06 ClangBuildAnalyzerSession.txt
.rw-r--r-- 870 revolt staff 2020-10-04 19:04 ClangBuildAnalyzerTest.LinkFileList
.rw-r--r-- 47k revolt staff 2020-10-04 19:04 ClangBuildAnalyzerTest_dependency_info.dat
.rw-r--r-- 490 revolt staff 2020-10-04 19:04 main.d
.rw-r--r-- 220 revolt staff 2020-10-04 19:04 main.dia
.rw-r--r-- 2.6k revolt staff 2020-10-04 19:04 main.json
.rw-r--r-- 4.7k revolt staff 2020-10-04 19:04 main.o
.rw-r--r-- 501 revolt staff 2020-10-04 19:04 SceneDelegate.d
.rw-r--r-- 220 revolt staff 2020-10-04 19:04 SceneDelegate.dia
.rw-r--r-- 2.7k revolt staff 2020-10-04 19:04 SceneDelegate.json
.rw-r--r-- 19k revolt staff 2020-10-04 19:04 SceneDelegate.o
.rw-r--r-- 503 revolt staff 2020-10-04 19:04 ViewController.d
.rw-r--r-- 220 revolt staff 2020-10-04 19:04 ViewController.dia
.rw-r--r-- 1.2k revolt staff 2020-10-04 19:04 ViewController.json
.rw-r--r-- 5.8k revolt staff 2020-10-04 19:04 ViewController.o
> ~/Downloads/ClangBuildAnalyzer-mac --stop DerivedData/ClangBuildAnalyzerTest/Build/Intermediates.noindex/ClangBuildAnalyzerTest.build/Debug-iphoneos/ClangBuildAnalyzerTest.build/Objects-normal/arm64 clang_analyzer_report
Stopping build tracing and saving to 'clang_analyzer_report'...
ERROR: no .json files found under 'DerivedData/ClangBuildAnalyzerTest/Build/Intermediates.noindex/ClangBuildAnalyzerTest.build/Debug-iphoneos/ClangBuildAnalyzerTest.build/Objects-normal/arm64'.
@revolter can you send one of the these *.json
files? I don't have an Xcode version that supports -ftime-trace
here, and installing one would require me to update my macOS version, which I don't quite want to do just yet :)
Sure, here it is:
{"traceEvents":[{"pid":1,"tid":0,"ph":"X","ts":3284,"dur":2722480,"name":"Module Load","args":{"detail":"UIKit"}},{"pid":1,"tid":0,"ph":"X","ts":2576,"dur":2724509,"name":"Source","args":{"detail":"/Users/revolt/Downloads/ClangBuildAnalyzerTest/ClangBuildAnalyzerTest/AppDelegate.h"}},{"pid":1,"tid":0,"ph":"X","ts":2159,"dur":2733988,"name":"Frontend"},{"pid":1,"tid":0,"ph":"X","ts":2737305,"dur":501,"name":"PerModulePasses"},{"pid":1,"tid":0,"ph":"X","ts":2738004,"dur":674,"name":"OptFunction","args":{"detail":"\u0001-[AppDelegate application:didFinishLaunchingWithOptions:]"}},{"pid":1,"tid":0,"ph":"X","ts":2738679,"dur":502,"name":"OptFunction","args":{"detail":"\u0001-[AppDelegate application:configurationForConnectingSceneSession:options:]"}},{"pid":1,"tid":0,"ph":"X","ts":2737811,"dur":47510,"name":"OptModule","args":{"detail":"/Users/revolt/Downloads/ClangBuildAnalyzerTest/ClangBuildAnalyzerTest/AppDelegate.m"}},{"pid":1,"tid":0,"ph":"X","ts":2737807,"dur":47635,"name":"CodeGenPasses"},{"pid":1,"tid":0,"ph":"X","ts":2736549,"dur":50501,"name":"Backend"},{"pid":1,"tid":0,"ph":"X","ts":127,"dur":2788096,"name":"ExecuteCompiler"},{"pid":1,"tid":1,"ph":"X","ts":0,"dur":2788095,"name":"Total ExecuteCompiler","args":{"count":1,"avg ms":2788}},{"pid":1,"tid":2,"ph":"X","ts":0,"dur":2734334,"name":"Total Frontend","args":{"count":2,"avg ms":1367}},{"pid":1,"tid":3,"ph":"X","ts":0,"dur":2724508,"name":"Total Source","args":{"count":1,"avg ms":2724}},{"pid":1,"tid":4,"ph":"X","ts":0,"dur":2722479,"name":"Total Module Load","args":{"count":1,"avg ms":2722}},{"pid":1,"tid":5,"ph":"X","ts":0,"dur":50500,"name":"Total Backend","args":{"count":1,"avg ms":50}},{"pid":1,"tid":6,"ph":"X","ts":0,"dur":48006,"name":"Total OptModule","args":{"count":2,"avg ms":24}},{"pid":1,"tid":7,"ph":"X","ts":0,"dur":47635,"name":"Total CodeGenPasses","args":{"count":1,"avg ms":47}},{"pid":1,"tid":8,"ph":"X","ts":0,"dur":1872,"name":"Total OptFunction","args":{"count":12,"avg ms":0}},{"pid":1,"tid":9,"ph":"X","ts":0,"dur":1826,"name":"Total RunPass","args":{"count":195,"avg ms":0}},{"pid":1,"tid":10,"ph":"X","ts":0,"dur":501,"name":"Total PerModulePasses","args":{"count":1,"avg ms":0}},{"pid":1,"tid":11,"ph":"X","ts":0,"dur":210,"name":"Total DebugType","args":{"count":30,"avg ms":0}},{"pid":1,"tid":12,"ph":"X","ts":0,"dur":96,"name":"Total Module LoadIndex","args":{"count":1,"avg ms":0}},{"pid":1,"tid":13,"ph":"X","ts":0,"dur":12,"name":"Total PerFunctionPasses","args":{"count":1,"avg ms":0}},{"pid":1,"tid":14,"ph":"X","ts":0,"dur":1,"name":"Total PerformPendingInstantiations","args":{"count":1,"avg ms":0}},{"cat":"","pid":1,"tid":0,"ts":0,"ph":"M","name":"process_name","args":{"name":"clang"}}]}
Hmm that JSON file is fine. I'm wondering if there's something entirely else going on, like for some reason this executable can't read the files or whatever. No ideas right now, sorry! Once/if I update my Mac to support this Xcode version then I can debug it myself, meanwhile "try debugging" is the best advice I can give :/
I remember ~/Downloads
requiring special permissions in the latest macOS version, so I moved both the executable and my test project to ~/Development
, and even tried running it with sudo
to no avail 🤔
@revolter, your ClangBuildAnalyzerSession.txt seems to be newer than your .json files. Make sure you do the compilation between --start
and --stop
commands. Or use --all
command if it's available to you.
your ClangBuildAnalyzerSession.txt seems to be newer than your .json files
Indeed 🤔 Firstly, it should have said this instead.
Secondly, there's a chicken and egg problem. The DerivedData
is not created until you build the project for the first time. After this, you can start the analyzer. But for the next build, it doesn't generate the JSON files again, as it does only an incremental build of what changed. If you clean the project instead, it also deletes the analyzer session file, and you're back at the beginning. Can't I store the session in a directory, and use the JSON files from another directory?
There are multiple ways out:
OBJROOT
and/or SYMROOT
to be out of ~/Library so that build products can be in a child directory of CBA session file.-derivedDataPath
and same as 2Friends, is there a specific solution for this? I also encountered the same problem. There is no * JSON file, the build directory of Xcode does have JSON file, thank you
your ClangBuildAnalyzerSession.txt seems to be newer than your .json files
Indeed 🤔 Firstly, it should have said this instead.
Secondly, there's a chicken and egg problem. The
DerivedData
is not created until you build the project for the first time. After this, you can start the analyzer. But for the next build, it doesn't generate the JSON files again, as it does only an incremental build of what changed. If you clean the project instead, it also deletes the analyzer session file, and you're back at the beginning. Can't I store the session in a directory, and use the JSON files from another directory?
Hello, have you solved it? An IOS project. I want to use this project to analyze the build time
CBA works fine. You just need to add -fime-trace to the C flags settings (will get set on C++ flags too), and then point it to the folders in DevivedData where Xcode puts the data. These folders can change after a clean though, and have randomized characters in them. The Report Naviagator shows the command line.
CompileC /Users/Foo/Library/Developer/Xcode/DerivedData/foo-erbkczkopelnfhennypqjfnicqai/Build/Intermediates.noindex/foo.build/Debug/foo.build/Objects-normal/arm64/bar.o
In that folder alongside the .o file, there will be a json with the timing results from clang /Users/Foo/Library/Developer/Xcode/DerivedData/foo-erbkczkopelnfhennypqjfnicqai/Build/Intermediates.noindex/foo.build/Debug/foo.build/Objects-normal/arm64/bar.json
You can open any of the json files in that folder with perfetto.dev to see what includes are pulled in. For example, I found that any inclusion of std STL string causes 5 instantiations of basic_string to be injected into each file.
Keep in mind that Xcode workspaces reroute all output to a different folder than the project does. I just wrote a script to process all this for my app. You can reference that if it helps.
macOS Catalina 10.15.5 (19F101)
ClangBuildAnalyzerTest.zip