What's the difference between managed callstack and native callstack, why cannot resolve the symbol from managed callstack by dbghelp? can anyone tell me the basic reason?
why dbghelp cannot resolve symbol from managed callstack?
98 views Asked by GuangJun Liu At
1
There are 1 answers
Related Questions in C++
- How to immediately apply DISPLAYCONFIG_SCALING display scaling mode with SetDisplayConfig and DISPLAYCONFIG_PATH_TARGET_INFO
- Why can't I use templates members in its specialization?
- How to fix "Access violation executing location" when using GLFW and GLAD
- Dynamic array of structures in C++/ cannot fill a dynamic array of doubles in structure from dynamic array of structures
- How do I apply the interface concept with the base-class in design?
- File refuses to compile std::erase() even if using -std=g++23
- How can I do a successful map when the number of elements to be mapped is not consistent in Thrust C++
- Can std::bit_cast be applied to an empty object?
- Unexpected inter-thread happens-before relationships from relaxed memory ordering
- How i can move element of dynamic vector in argument of function push_back for dynamic vector
- Brick Breaker Ball Bounce
- Thread-safe lock-free min where both operands can change c++
- Watchdog Timer Reset on ESP32 using Webservers
- How to solve compiler error: no matching function for call to 'dmhFS::dmhFS()' in my case?
- Conda CMAKE CXX Compiler error while compiling Pytorch
Related Questions in CALLSTACK
- Debugging MAUI issues from android playstore Crash details stacks
- Does JavaScript have an Event table?
- Java: Lazy object storage with auto key from stack trace
- Node Js:- RangeError: Maximum call stack size exceeded
- set_terminate unexplained behaviour with exception thrown from std::thread and libunwind
- Find the stack start address in runtime. cortexM4 processor
- How to free the call stack in C?
- Why don't I see task queue bunch up?
- call stack when Segmentation fault
- Order of processing microtasks in JavaScript
- How are python variable names resolved? (explanations on the web are a bit uncertain)
- What does (deleted) mean in android app crash callstack?
- Why are perf back traces on Linux skipping a function (or showing a call to _init), with DWARF, LBR, and even FP (frame pointers)?
- why setImmediate function executes after setTimeout
- How to create stack trace for other process(out of process) when it crashes in google breakpad?
Related Questions in MANAGED
- Using Amazon managed Prometheus to get EC2 metrics data in Grafana
- BUG? deleting occurrence with ews managed api deletes entire series
- Cloudflare Managed Challenge on API for SPA causing challenge not to be seen
- Custom Crawled and Managed Property not being returned in Graph API search
- Emails quarantine at client side from goanywhere mft
- Build error: "Cannot find project info. This can indicate a missing project reference" after migrating from NET Framework 4.0 to NET Standard 2.0
- C# safety concerns for pointer to "ref struct" with managed fields. Ignoring warning CS8500
- Error: Unable to resolve module when using shared library
- Creating multiple different Azure Win servers with managed disks using For_each argument
- Managed Bootstraper Application (for .Net Framework ) for Wix Toolset v4 Bundle
- Unmanaged exports library not working for c# http requests
- Encoding Problems with C++ std::string to C# managed System::String
- Async Storage in react native expo managed workflow
- Active Batch - Download Files from SFTP filtered by File Name
- Want to integrate one-one and one-many (Group Chat) in React Native (Expo Managed)
Related Questions in DBGHELP
- Is it possible to get address of global variable with symFromName
- How to precisely append specific heap memory region into a custom crash dump via MiniDumpWriteDump API in DbgHelp library?
- Diagnose BEX event, exception code 0xC0000409 (STATUS_STACK_BUFFER_OVERRUN)
- How to use DbgHelpCreateUserDump?
- Unable to get Windows symbols from the public symbols server using an x64 application
- PSRCCODEINFO obtained with SymEnumLine has Address with few extra bytes
- Cancel downloading symbols in Debug Help Library
- why dbghelp cannot resolve symbol from managed callstack?
- Verify symbol server is valid
- How to obtain both managed(dotnet) and native(C++) callstack of my project by dbghelp?
- Why does SymInitialize() invoke CreateFile()?
- No module information in minidump on win 11
- DbgHelp vs DbgEng vs DIA SDK in regards to thread safety
- best practice to use dbghelp with your application
- Cannot get SymGetTypeInfo to work (error 1, Incorrect function)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
When a native exe runs, windows maps the exe (and dll's) into memory using memory mapped files functionality (not that that matters). So when your program runs, you have a module address which is the base address that the native exe (or dll) image is loaded from (e.g. module address points to the first byte in the exe/dll file and so on). So when you have a address from a stack walk, you "know" what module the address is from based on the loaded module list as the address will be in a range one of the modules address ranges. It then knows the offset into the exe file (i.e. address - module address == offset into exe). dbhelp uses this address to find the module and then uses the offset into the exe to find the symbol (the pdb has a table of address ranges to symbols).
So this is how it works for a native running code.
Why you can't work for managed exe is because how managed code works.
Compiled managed code not native code, it's IL. A managed EXE is a small native wrapper around a IL assembly. The native wrapper is used to "start" the .net runtime and run the entry point in the IL assembly.
The .net runtime uses JIT to convert the IL to native code. It does this by allocating memory, generating the native code and marking the memory page as excutable, then jumping to it. So when these addresses show up in a stack walk, it's doesn't map to ANY loaded native module (as it doesn't). So you just see a address it can't map to any PDB file.
So to be able to map this unknown addresses to a managed symbol, you need to have:
So dbghelp is only for native symbol mapping and knows nothing about managed stack traces.
The managed stack traces of memory dumps (or live process memory) needs knowage / access to the internal managed runtime tables to be able to resolve the temporary executable memory pages to managed symbols.