cmake/msvc: unify CRT model and add VTune-safe flags for RelWithDebInfo#349
Merged
Merged
Conversation
ab4664d to
6ec1bda
Compare
RelWithDebInfo was built with /MD while Release used /MT, creating cross-heap mismatches that crashed in MSVCP140.dll when VTune injected its collector DLLs. Changes ------------ • All build types now use the same C++ runtime (either all static or all dynamic, depending on the MSVC_BUILD_L0_DYNAMIC_VCRUNTIME flag). This prevents the "two-different-heaps" problem that caused the MSVCP140.dll crash when VTune was attached. • For RelWithDebInfo we also turned off “incremental linking” and kept a full PDB file. VTune can read these symbols and no longer trips over the extra jump table that incremental builds add. Bottom line: you can now profile the RelWithDebInfo build in VTune without any access-violation errors.
6ec1bda to
7021ff1
Compare
nrspruit
approved these changes
Jun 17, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
RelWithDebInfo was built with /MD while Release used /MT, creating cross-heap mismatches that crashed in MSVCP140.dll when VTune injected its collector DLLs.
Changes
• All build types now use the same C++ runtime (either all static or
all dynamic, depending on the MSVC_BUILD_L0_DYNAMIC_VCRUNTIME flag).
This prevents the "two-different-heaps" problem that caused the
MSVCP140.dll crash when VTune was attached.
• For RelWithDebInfo we also turned off “incremental linking” and kept a
full PDB file. VTune can read these symbols and no longer trips over
the extra jump table that incremental builds add.
Bottom line: you can now profile the RelWithDebInfo build in VTune without any access-violation errors.