2016-09-20 203 views
0

我正在开发一个Visual Studio包,它将采用SSMS(SQL Server Management Studio)扩展的形式。我想在调试模式下运行项目时打开SSMS。当我按运行,SSMS正常打开,但只要我尝试连接到一个数据库的Visual Studio抛出这个exeption:当“启动外部程序”是ssms.exe时,无法从Visual Studio进行调试

托管调试助手“PInvokeStackImbalance”已检测到“C的一个问题:\ Program Files文件(86 )\ Microsoft SQL Server \ 110 \ Tools \ Binn \ ManagementStudio \ Ssms.exe'。

附加信息:调用PInvoke函数'ObjectExplorer!Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.Service :: GetBrowserInfoInterop'时,堆栈已经不平衡。这很可能是因为托管的PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名相匹配。

如果我点击'继续',它会再次显示同样的异常,但最终它会消失。 SSMS正常运行,工具菜单中的项目出现(附图片) SSMS print screen

但问题是断点在Visual Studio上没有命中。

enter image description here

我在项目属性的调试部分选择SSMS作为启动程序从“启动外部程序”。默认情况下,它具有VS15安装文件夹中的devenv.exe。现在,我认为这里的问题是,只有在选择devenv.exe作为外部程序时,调试才可用。我对吗?如果是这样,是否有任何方法来启用调试?

+1

http://stackoverflow.com/questions/3506796/pinvokestackimbalance-how-can-i-fix内扩展文件夹-this-turn-off-off-off – Techidiot

+0

这个异常消失了,但我仍然无法击中断点。我希望能够设置断点并点击它们,因为我仍在开发软件,如果不进行调试将会是一场噩梦。 @Techidiot –

+0

我没有具体的经验,但我敢打赌,SSMS在一个单独的过程中运行它的插件。你有没有尝试在你的代码中添加一个'System.Diagnostics.Debugger.Launch()',看看你能否让JIT调试器窗口允许你连接? –

回答

0

我设法解决这个问题。首先,我需要关闭PInvokeStackImbalance

  1. CTRL + ALT + E
  2. 在 “托管调试助手” 取消PInvokeStackImbalance。

然后就是重建和复制新的DLL在SSMS安装文件夹

相关问题