cmake --trace-format=json-v1: Unexpected frame numbers
In JSON trace (--trace-format=json-v1
) the frame
member has unexpected values in else
and elseif
commands. The value seems to be always one less than it should be.
For example:
cmake_minimum_required(VERSION 3.17)
project(TraceProject LANGUAGES C)
if (DEFINED CMAKE_TOOLCHAIN_FILE)
message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
else()
message(STATUS "No toolchain file")
endif()
Produces this output when building with cmake version 3.20.3:
cmake --trace-format=json-v1 -S src -B out 2>&1 | grep CMakeLists.txt | jq -c '{cmd, frame}'
{"cmd":"cmake_minimum_required","frame":1}
{"cmd":"project","frame":1}
{"cmd":"if","frame":1}
{"cmd":"else","frame":0}
{"cmd":"message","frame":1}
The documentation of the frame
member is quite terse ("Stack frame depth of the function that was called.") but I'd expect the value of frame
to be 1 in the else
command in this example.