diff --git a/Modules/Core/Common/src/CMakeLists.txt b/Modules/Core/Common/src/CMakeLists.txt index d7da6aa50ba..d99c8ed0e1b 100644 --- a/Modules/Core/Common/src/CMakeLists.txt +++ b/Modules/Core/Common/src/CMakeLists.txt @@ -278,3 +278,43 @@ if(ITK_USE_TBB) # Define TBB_USE_CAPTURED_EXCEPTION=0 to request rethrow of the exact exception. target_compile_definitions(ITKCommon PUBLIC TBB_USE_CAPTURED_EXCEPTION=0) endif() + +if(MSVC) + set(ITK_NATVIS_FILE "${ITK_SOURCE_DIR}/Utilities/Debugger/ITK.natvis") + if(CMAKE_GENERATOR MATCHES "Ninja") + # Ninja/Makefiles Generator support (embeds directly inside the executable's PDB) + target_link_options( + ITKCommon + INTERFACE + "$" + "$/${ITK_INSTALL_DATA_DIR}/Debugger/ITK.natvis>" + ) + # Force Ninja to re-link if the .natvis file changes + set_property( + TARGET + ITKCommon + APPEND + PROPERTY + LINK_DEPENDS + "${ITK_NATVIS_FILE}" + ) + else() + # Visual Studio Generator support (shows up in the Solution Explorer) + target_sources( + ITKCommon + INTERFACE + "$" + "$" + "$" + "$" + ) + endif() + + install( + FILES + "${ITK_NATVIS_FILE}" + "${ITK_SOURCE_DIR}/Utilities/Debugger/ITK.natstepfilter" + DESTINATION ${ITK_INSTALL_DATA_DIR}/Debugger + COMPONENT Development + ) +endif() diff --git a/Utilities/Debugger/ITK.natstepfilter b/Utilities/Debugger/ITK.natstepfilter new file mode 100644 index 00000000000..f1a6b471c53 --- /dev/null +++ b/Utilities/Debugger/ITK.natstepfilter @@ -0,0 +1,9 @@ + + + + itk::SmartPointer.*NoStepInto + itk::Object::RegisterNoStepInto + vtkSmartPointer.*NoStepInto + + + diff --git a/Utilities/Debugger/ITK.natvis b/Utilities/Debugger/ITK.natvis index 0aa7df0a612..4be732b26a7 100644 --- a/Utilities/Debugger/ITK.natvis +++ b/Utilities/Debugger/ITK.natvis @@ -1,6 +1,5 @@ - - + @@ -87,23 +86,20 @@ - - + [{m_InternalArray[0],g}] m_InternalArray[0] - - + [{m_InternalArray[0],g}, {m_InternalArray[1],g}] m_InternalArray[0] m_InternalArray[1] - - + [{m_InternalArray[0],g}, {m_InternalArray[1],g}, {m_InternalArray[2],g}] m_InternalArray[0] @@ -111,17 +107,157 @@ m_InternalArray[2] - - + {m_InternalArray} - $T1 + $T2 + m_InternalArray + + + + + + + Point[{m_InternalArray[0],g}] + + m_InternalArray[0] + + + + Point[{m_InternalArray[0],g}, {m_InternalArray[1],g}] + + m_InternalArray[0] + m_InternalArray[1] + + + + Point[{m_InternalArray[0],g}, {m_InternalArray[1],g}, {m_InternalArray[2],g}] + + m_InternalArray[0] + m_InternalArray[1] + m_InternalArray[2] + + + + Point{m_InternalArray} + + + $T2 + m_InternalArray + + + + + + Vector{m_InternalArray} + + + $T2 + m_InternalArray + + + + + + CovariantVector{m_InternalArray} + + + $T2 m_InternalArray + + ContinuousIndex[{m_InternalArray[0]}] + + m_InternalArray[0] + + + + ContinuousIndex[{m_InternalArray[0]}, {m_InternalArray[1]}] + + m_InternalArray[0] + m_InternalArray[1] + + + + ContinuousIndex[{m_InternalArray[0]}, {m_InternalArray[1]}, {m_InternalArray[2]}] + + m_InternalArray[0] + m_InternalArray[1] + m_InternalArray[2] + + + + ContinuousIndex{m_InternalArray} + + + $T2 + m_InternalArray + + + + + + RGB({m_InternalArray[0]}, {m_InternalArray[1]}, {m_InternalArray[2]}) + + m_InternalArray[0] + m_InternalArray[1] + m_InternalArray[2] + + + + + RGBA({m_InternalArray[0]}, {m_InternalArray[1]}, {m_InternalArray[2]}, {m_InternalArray[3]}) + + m_InternalArray[0] + m_InternalArray[1] + m_InternalArray[2] + m_InternalArray[3] + + + + + empty + {m_Data,[m_NumElements]} + + m_NumElements + m_LetArrayManageMemory + + m_NumElements + m_Data + + + + + + empty + {data,[num_elmts]} + + num_elmts + + num_elmts + data + + + + + + Matrix {$T2}x{$T3} + + + Forward + 2 + $T2 + $T3 + m_Matrix.data_[0] + + + + ({m_Index}->[{m_Index.m_InternalArray[0] + long long(m_Size.m_InternalArray[0])}]) diff --git a/Utilities/Debugger/default.natstepfilter b/Utilities/Debugger/default.natstepfilter deleted file mode 100644 index 6433b9291da..00000000000 --- a/Utilities/Debugger/default.natstepfilter +++ /dev/null @@ -1,31 +0,0 @@ - - - - __abi_winrt_.*NoStepInto - __security_check_cookieNoStepInto - _chkstkNoStepInto - __chkstkNoStepInto - _Invoke@12NoStepInto - _ObjectStublessClient.*NoStepInto - _RTC_Check(Esp|StackVars)NoStepInto - ATL::CComBSTR::operator&NoStepInto - ATL::CComPtrBase.*::operator->NoStepInto - ATL::CComPtrBase.*::operator&NoStepInto - ATL::CHeapPtrBase.*::operator->NoStepInto - ATL::CHeapPtrBase.*::operator&NoStepInto - IID_PPV_ARGS_Helper<.*NoStepInto - Microsoft::WRL::ComPtr<.*>::operator->NoStepInto - Microsoft::WRL::ComPtr<.*>::operator&NoStepInto - Microsoft::WRL::Details::ComPtrRef.*NoStepInto - operator newNoStepInto - Platform::EventSource::Invoke.*NoStepInto - std::_Variant_base<.*>::_StorageNoStepInto - std::_Variant_raw_get<.*NoStepInto - std::forward<.*NoStepInto - std::move<.*NoStepInto - - itk::SmartPointer.*NoStepInto - vtkSmartPointer.*NoStepInto - std::.+NoStepInto - itk::Object::RegisterNoStepInto -