`使用托管兼容模式`或`启用本机代码调试'?

时间:2017-02-10 11:41:56

标签: debugging visual-studio-2015

我为Autodesk Revit编写了.net-plugins。 Revit是非托管应用程序。因此,为了成功调试,我要为Use managed compatibility mode选项或Enable native code debugging选项(或两者都设置)设置<html> <head> <title>Insert title here</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ng-table/1.0.0/ng-table.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/ng-table/1.0.0/ng-table.js"></script> </head> <body> <div ng-app="myApp"> <div ng-controller="introController"> <br> Search: <input type="text" ng-model="searchUser"/> <table ng-table="tableParams" class="table table-striped"> <tr ng-repeat="user in $data"> <td title="'Name'" sortable="'name'"> {{user.name}}</td> <td title="'Age'" sortable="'age'"> {{user.age}}</td> <td title="'Company'" sortable="'company'"> {{user.company}}</td> </tr> </table> </div> </div> <script type="text/javascript"> var app=angular.module("myApp", ["ngTable"]); app.controller('introController',function(NgTableParams,$scope,$filter){ $scope.data = [{name: "Moroni", age: 50,company:"ABC"}, {name: "Simon", age: 43,company:"ABC"}, {name: "Jacob", age: 27,company:"ABC"}, {name: "Nephi", age: 29,company:"ABC"}, {name: "Christian", age: 34,company:"ABC"}, {name: "Tiancum", age: 43,company:"ABC"}, {name: "Jacob", age: 27,company:"ABC"}]; var tempData=$scope.data; init(); function init() { $scope.flag=false; $scope.tableParams = new NgTableParams({ page: 1, count: 10, filter: { message: '' }, sorting: { timestamp: 'asc' } },{ getData: function ($defer, params) { if(params) { var orderedData = params.sorting() ? $filter('orderBy')($scope.data, params.orderBy()) : $scope.data; params.total(orderedData.length); $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count())); } } }); }; $scope.tableParams = new NgTableParams({ count: 5}, { counts: [5, 10, 25], dataset: $scope.data}); //search filter code var searchData = function(){ if($scope.searchUser) return $filter('filter')(tempData,$scope.searchUser); return tempData; }; $scope.$watch("searchUser", function (newValue,oldValue) { if (oldValue !== undefined) { var filterData=searchData(); $scope.tableParams = new NgTableParams({ count: 10}, { counts: [5, 10, 25,100,1000], dataset:filterData}); } }); }); </script> </body> </html> 。否则无法启动调试。

其中第一个适用于所有项目。其中第二个单独用于每个项目。

enter image description here

这些选项有什么区别?我不明白他们做了什么。在我的案例中使用哪个选项更正确?

1 个答案:

答案 0 :(得分:10)

您不必启用非托管调试来调试插件。当主机应用程序加载加载项时,代码中的断点将激活(从空心变为实心)。如果您不确定是否发生了这种情况,请查看Debug&gt; Windows&gt;模块窗口。

启用非托管调试不会对调试会话产生很大影响,但是可能需要相当长的时间才能启动,您可能需要暂时禁用符号服务器以避免对其产生任何烦恼。

工具&gt;选项设置名称相当差。微软一直在研究新的调试引擎,但被迫(或选择)删除了一些功能。 &#34;使用托管兼容模式&#34;强制加载旧版本的托管调试器,即VS2010中使用的版本。调试C ++ / CLI代码时需要它。它在VS2015中也很有用,它的托管调试引擎非常多。您将错过一些新的调试功能,如返回值检查和64位编辑+继续。否则,您无需调试加载项。

&#34;使用原生兼容模式&#34;大致相同的故事,它启用了旧版本的非托管调试引擎,即VS2012中的版本。您将错过新的Natvis可视化工具。除了让旧的可视化工作器工作之外,我还没有找到令人信服的理由需要它。