Visual Studio native debugger extension to help debug native applications using Mono.

Overview

Unity Mixed Callstack

UnityMixedCallstack is a Visual Studio 2017/2019 extension to help debug native applications embedding Mono, like Unity.

If you are using Visual Studio 2015 then you will need to grab one of the older releases of UnityMixedCallstack

Mono doesn't generate debug symbols that Visual Studio understands for jitted functions.

As a result, Visual Studio can not show anything meaningful for managed stack frames.

This fork of PmipMyCallstack has been developed for developers at unity-technologies and support has been added to our clone of mono, which can be found here https://github.com/Unity-Technologies/mono

This version requires you to set the UNITY_MIXED_CALLSTACK environment variable before launching visual studio and before launching Unity (or using our mono standalone), which will tell the mono runtime to write out each jit'd function to a file.

The original PmipMyCallstack plugin created by JB Evain would call the function mono_pmip on every frame that doesn't belong to a module to show a meaningful representation of the stack frame and display it natively in the call stack window. This plugin does the same thing, but instead of calling over ipc, mono writes a file with the jit information and we lookup the IP from that. This allows us to open much larger callstacks, and many frames without visual studio hanging for a long time (an issue since Unity has so many threads).

In this version we also display the module the managed code belongs to. This gives you a nice callstack to look at in visual studio.

Remember, you need to disable Just My Code in the debugger options (Debug -> Options...) to expand the [External Code] entry in the callstack.

Before

Before Unity Mixed Callstack

After

After Unity Mixed Callstack

Comments
  • Could this approach also work with Windows Performance Analyzer?

    Could this approach also work with Windows Performance Analyzer?

    Right now it's impossible to view Mono stack frames within a recorded WPR trace (they show up as ?!?, like the documentation says).

    Can this tool be extended to allow viewing them in Windows Performance Analyzer?

    opened by Holo-Krzysztof 3
  • Version 2.7 breaks compatibility with Visual Studio 2019

    Version 2.7 breaks compatibility with Visual Studio 2019

    The latest Version 2.7 which introduces support for VS 2022 cannot be installed on previous versions.

    With only 2019 installed, it gives this error:

    VSIXInstaller.NoApplicableSKUsException: This extension is not installable on any currently installed products.

    opened by akerfoot 2
  • Fix parsing of version field when decimal separator is not

    Fix parsing of version field when decimal separator is not "."

    This should fix an issue where pmip file parsing fails if your system is configured with a decimal separator that is not .. On my system I had , set as the decimal separator (default for danish region setting) and managed addresses were not translated but as soon as I set it to . it started working.

    This is mostly a speculative fix since I'm not actually sure how to build/package the extension in order to load it into VS so I haven't tested it beyond trying to parse some different version numbers with different decimal separators configured.

    opened by salvadorj 2
  • Unity2019.4.8f1, Visual Studio 2022 don't work

    Unity2019.4.8f1, Visual Studio 2022 don't work

    I set UNITY_MIXED_CALLSTACK environment variable 1, set Just My Code disabled in visual studio. set the symbol path in vs is http://symbolserver.unity3d.com/.

    Then, I made a Unity2019.4.8f1's dump file, and go to Analyse it , but the callstack of managed code is not show

    callstack :

    0000012c2897c953() 0000012c25ab4788() mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method, void * obj, void * * params, _MonoObject * * exc, _MonoError * error) 行 2809 C mono-2.0-bdwgc.dll!do_runtime_invoke(_MonoMethod * method, void * obj, void * * params, _MonoObject * * exc, _MonoError * error) 行 2921 C [内联框架] mono-2.0-bdwgc.dll!mono_runtime_try_invoke(_MonoMethod *) 行 3026 C mono-2.0-bdwgc.dll!mono_runtime_invoke(_MonoMethod * method, void * obj, void * * params, _MonoObject * * exc) 行 2968 C Unity.exe!scripting_method_invoke(class ScriptingMethodPtr,class ScriptingObjectPtr,struct ScriptingArguments &,class ScriptingExceptionPtr *,bool) Unity.exe!ScriptingInvocation::Invoke(class ScriptingExceptionPtr *,bool) Unity.exe!MonoBehaviour::CallMethodIfAvailable(int) Unity.exe!MonoBehaviour::CallUpdateMethod(int) Unity.exe!BaseBehaviourManager::CommonUpdate(void) Unity.exe!BehaviourManager::Update(void) Unity.exe!InitPlayerLoopCallbacks'::2'::UpdateScriptRunBehaviourUpdateRegistrator::Forward() Unity.exe!ExecutePlayerLoop(struct NativePlayerLoopSystem *) Unity.exe!ExecutePlayerLoop(struct NativePlayerLoopSystem *) Unity.exe!PlayerLoop(void) Unity.exe!PlayerLoopController::UpdateScene(bool) Unity.exe!Application::TickTimer(void) Unity.exe!MainMessageLoop() Unity.exe!WinMain() Unity.exe!__scrt_common_main_seh() kernel32.dll!BaseThreadInitThunk() ntdll.dll!RtlUserThreadStart()

    c# code :

    public class NewBehaviourScript : MonoBehaviour { // Start is called before the first frame update void Start() {

    }
    
    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.A)) {
            int i = 0;
            while(true) {
                ++i;
            }
        }   
    }
    

    } Snipaste_2022-08-09_15-42-12

    I don't understand why , so i need help

    opened by kaclok 1
  • Add support for Visual Studio 2022.

    Add support for Visual Studio 2022.

    Added initial support for Visual Studio 2022. Tested with recent trunk with both 2019 and 2022.

    2 things that may need cleanup :

    1. Getting Visual Studio path seems a bit tricky. Used my local path for now.
    2. VSIX Manifest needs comment/uncomment depending on version building for.
    opened by venkify 1
  • bump version to 2.6

    bump version to 2.6

    Need to bump extension version after landing fix: https://github.com/Unity-Technologies/UnityMixedCallstack/commit/627053efe0a69ce2f034bafe75e95d5dd5d9232d

    opened by UnityAlex 0
Releases(2.8)
Owner
Unity Technologies
Unity Technologies
Visual Studio Extension that installs additional color themes

Using this Extension Download and install the extension Restart Visual Studio Navigate to Tools > Options > Environment > General and select your colo

Microsoft 328 Dec 19, 2022
Visual Studio extension for assembly syntax highlighting and code completion in assembly files and the disassembly window

Asm-Dude Assembly syntax highlighting and code assistance for assembly source files and the disassembly window for Visual Studio 2015, 2017 and 2019.

Henk-Jan Lebbink 4k Jan 6, 2023
A Visual Studio extension that provides enhanced support for editing High Level Shading Language (HLSL) files

HLSL Tools for Visual Studio This extension is for Visual Studio 2017 / 2019. Go here for the Visual Studio Code extension. HLSL Tools is a Visual Stu

Tim Jones 433 Dec 27, 2022
RV-Debugger-BL702 is an opensource project that implement a JTAG+UART debugger with BL702C-A0.

BL702 is highly integrated BLE and Zigbee combo chipset for IoT applications, contains 32-bit RISC-V CPU with FPU, frequency up to 144MHz, with 132KB RAM and 192 KB ROM, 1Kb eFuse, 512KB embedded Flash, USB2.0 FS device interface, and many other features.

Sipeed 100 Jan 1, 2023
A keystone engine powered Windows Debugger extension

DbgKeystone A Keystone engine powered Windows Debugger extension Reasoning WinDbg's default assember (the a command) can't handle instructions involvi

Michael B. 12 Nov 9, 2022
A C# hot reload framework for Unity3D, based on Mono's MONO_AOT_MODE_INTERP mode.

PureScript 一个支持Unity3D的C#热更框架,基于Mono的MONO_AOT_MODE_INTERP模式。 支持在iOS平台Assembly.Load 构建时自动绑定Unity的Il2cpp代码。 支持大部分Unity特性,包括MonoBehaviour、Coroutine。 支持配置

null 268 Jan 9, 2023
A universal way to create a noclip mod in Unity games (Mono/IIL2CPP)

Universal-Unity-NoClip This projects aim to show how a noclip mod can be created in any unity game, regardless if its using an il2cpp or mono backend.

Jonah 25 Dec 21, 2022
QPEP (Quadratic Pose Estimation Problems) Enhanced VINS-Mono SLAM System

VINS-Mono-QPEP The QPEP (Quadratic Pose Estimation Problems) Enhanced VINS-Mono

Jin Wu 36 Nov 2, 2022
Bungie's Oni modified so it compiles with Microsoft Visual Studio 2019.

OniFoxed What's this? This is a modified variant of the recently leaked Oni source code so that it compiles under Microsoft Visual Studio 2019 with so

Mark Sowden 59 Dec 2, 2022
A D++ Discord Bot template for Visual Studio 2019 (x64 and x86)

D++ Windows Bot Template A D++ Discord Bot template for Visual Studio 2019 (x64 and x86, release and debug). The result of this tutorial. This templat

brainbox.cc 28 Dec 24, 2022
A Visual Studio template used to create Cobalt Strike BOFs

Introduction Cobalt Strike beacon object files (BOFs) is a feature that added to the beacon in order to allow rapid beacon extendibility in a more OPS

Securify 163 Dec 28, 2022
Sharpmake is an open-source C#-based solution for generating project definition files, such as Visual Studio projects and solutions, GNU makefiles, Xcode projects, etc.

Sharpmake Introduction Sharpmake is a generator for Visual Studio projects and solutions. It is similar to CMake and Premake, but it is designed for s

Ubisoft 779 Dec 23, 2022
Visual Studio Test Adapter for Catch2

Test Adapter for Catch2 Within Visual Studio, the Test Explorer is a convenient way to run and debug unit tests. This test adapter adds support for th

null 95 Dec 25, 2022
Useful UE4 Visual Studio extensions.

UE4 Smarter Macro Indenting This extension was designed to fix the unnecessary and annoying "smart" indenting that Visual Studio likes to do around va

Chris Pawlukowsky 250 Dec 16, 2022
Half-Life Singleplayer SDK 2.3, updated to compile with Visual Studio 2019. Provided as-is with no further support. See the README for more information.

Half Life 1 SDK LICENSE Half Life 1 SDK Copyright© Valve Corp. THIS DOCUMENT DESCRIBES A CONTRACT BETWEEN YOU AND VALVE CORPORATION (“Valve”). PLEASE

Sam Vanheer 6 Oct 10, 2022
RRxIO - Robust Radar Visual/Thermal Inertial Odometry: Robust and accurate state estimation even in challenging visual conditions.

RRxIO - Robust Radar Visual/Thermal Inertial Odometry RRxIO offers robust and accurate state estimation even in challenging visual conditions. RRxIO c

Christopher Doer 63 Dec 20, 2022
Visual Leak Detector for Visual C++ 2008-2015

Visual Leak Detector Introduction Visual C++ provides built-in memory leak detection, but its capabilities are minimal at best. This memory leak detec

Arkady Shapkin 908 Jan 8, 2023
Haxe native extension to read and write windows clipboard.

Haxe Clipboard This is a native library to read and write clipboard data from Haxe. It uses Ammer to generate bindings. Note: This is a Windows only l

Ludovic Bas 12 Nov 11, 2022
🍦 Never use cout/printf to debug again

IceCream-Cpp IceCream-Cpp is a little (single header) library to help with the print debugging on C++11 and forward. Try it at godbolt! Contents Insta

Renato Garcia 423 Jan 4, 2023