调试从托管C#库调用的本机C ++代码,由另一个应用程序

时间:2018-03-18 19:58:06

标签: c# c++ visual-studio debugging mixed-mode

我有以下设置:第三方应用程序(Autodesk Revit)通过C#Revit API执行我的C#库(该库是Revit插件,名为 csapi )。然后,我的C#库通过PInvoke调用另一个C ++本机库( libbrowserhost-client-capid.dll )。

我的目标是在Visual Studio中调试本机库。我有C ++源代码和符号。

如果我将C#插件库重建为可执行文件并直接从可执行文件调用非托管库,我已经能够调试它了。在Visual Studio 输出窗口中,我看到以下内容:

'csapi.exe' (Win32): Loaded 'D:\Documents\Visual Studio 2017\Projects\browserhost-csharp-api\BrowserhostCSharpApi\bin\x64\Debug\libbrowserhost-client-capid.dll'. Symbols loaded.

当Revit成为执行链中的第一个时,问题就来了。调试器省略了本机PInvoke调用(如Step Over)。 输出:

...
'Revit.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Ondra\AppData\Local\Temp\RevitAddins\csapi-Executing-20180318_200947_6493\csapi.dll', Symbols loaded.
'Revit.exe' (Managed (v4.0.30319)): Loaded 'C:\Program Files\Autodesk\Revit 2018\MessageLogger.dll'
'Revit.exe' (Managed (v4.0.30319)): Loaded 'C:\Program Files\Autodesk\Revit 2018\log4net.dll'
...

但是我看到没有加载 libbrowserhost-client-capid.dll

首先,这是什么输出?调试器或动态链接器还是其他什么?其次,如何将 libbrowserhost-client-capid.dll 加载到Revit进程以便能够进行调试?是否可以手动以某种方式将DLL加载到VS调试器?

0 个答案:

没有答案