我为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>
。否则无法启动调试。
其中第一个适用于所有项目。其中第二个单独用于每个项目。
这些选项有什么区别?我不明白他们做了什么。在我的案例中使用哪个选项更正确?
答案 0 :(得分:10)
您不必启用非托管调试来调试插件。当主机应用程序加载加载项时,代码中的断点将激活(从空心变为实心)。如果您不确定是否发生了这种情况,请查看Debug&gt; Windows&gt;模块窗口。
启用非托管调试不会对调试会话产生很大影响,但是可能需要相当长的时间才能启动,您可能需要暂时禁用符号服务器以避免对其产生任何烦恼。
工具&gt;选项设置名称相当差。微软一直在研究新的调试引擎,但被迫(或选择)删除了一些功能。 &#34;使用托管兼容模式&#34;强制加载旧版本的托管调试器,即VS2010中使用的版本。调试C ++ / CLI代码时需要它。它在VS2015中也很有用,它的托管调试引擎非常多。您将错过一些新的调试功能,如返回值检查和64位编辑+继续。否则,您无需调试加载项。
&#34;使用原生兼容模式&#34;大致相同的故事,它启用了旧版本的非托管调试引擎,即VS2012中的版本。您将错过新的Natvis可视化工具。除了让旧的可视化工作器工作之外,我还没有找到令人信服的理由需要它。