gpt4 book ai didi

c++ - C# 应用程序中的非托管调用堆栈

转载 作者:太空狗 更新时间:2023-10-29 20:16:39 26 4
gpt4 key购买 nike

我在编写的非托管 dll 中遇到访问冲突错误,但是当我尝试在 C# 应用程序中调试它时,它只会在 Visual Studio 的调试窗口中获取调用堆栈的最后一帧。

我将 debug->exceptions->System.AccessViolationException 设置为在调试器被抛出时中断它。

myunmanaged.dll!ViolatingFunc() Line 100 + 0xc bytes
- - - -
[external code] //myunmanaged.dll!function that I want to see
- - - -
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator();

我希望走上非托管堆栈,看看数据在哪里变成了 garbeldegook。这可能吗?

已回答 enter image description here

启用非托管调试是第 1 步,但为了让我一路走下去,我启用了 Microsoft Symbols。

这让我的堆栈跟踪看起来更像这样:

myunmanaged.dll!ViolatingFunc() 
- - - -
myunmanaged.dll!SomeFunc2()
- - - -
myunmanaged.dll!SomeFunc()
- - - -
[managed to unmanaged code transition]
- - - -
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator();

最佳答案

是的。您需要在“混合模式”下调试您的应用程序。右键单击项目,选择“调试”选项卡并选中“启用非托管代码调试”。您将看到托管框架和 native 框架。

mixed mode debugging

编辑:正如 ChrisO 提到的,没有 MS 符号会使 native 调试变得奇怪。将以下内容添加到 Windows 符号的符号路径:http://msdl.microsoft.com/download/symbols

关于c++ - C# 应用程序中的非托管调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8915495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com