如何在Visual Studio 2017中调试Xamarin代码?UWP项目按钮断点未触发
我太懂这种憋屈感了——写好按钮点击事件,设了断点,结果点击按钮完全没反应,断点根本不命中,折腾半天找不到原因。结合你给出的Login.xaml按钮代码和后台事件的情况,我给你列几个最常见的排查方向,一步步来试:
先确认后台事件的签名完全对得上
你的OnNextPage方法签名必须和XAML绑定的要求一致,正确的写法应该是这样:private void OnNextPage(object sender, EventArgs e) { // 你的业务逻辑代码 }重点注意参数类型:第一个是
object,第二个是EventArgs,不能写错;方法访问修饰符至少是private(按钮点击用private完全足够)。要是签名不对,XAML根本找不到这个方法,自然不会触发断点。检查UWP项目的调试配置和部署状态
- 先看顶部工具栏的配置,必须选*Debug(调试)*模式,要是选了Release(发布),代码会被编译器优化,断点基本不可能命中。
- 有时候部署出问题,运行的还是旧版本代码,你可以右键解决方案→清理,然后再右键→重新生成,之后重新启动调试。要是还不行,干脆手动删掉项目里的
bin和obj文件夹,再重新编译部署。
验证XAML和后台代码的关联是否正确
- 打开Login.xaml,检查根元素的
x:Class属性是不是和后台类完全匹配,比如:
这里的命名空间+类名,必须和Login.xaml.cs里的<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="YourAppName.Views.Login">namespace YourAppName.Views以及public partial class Login : ContentPage完全对应,差一个字符都不行。 - XAML有时候会有编译缓存问题,清理完bin/obj再编译,基本能解决这类关联失效的问题。
- 打开Login.xaml,检查根元素的
排查是否有其他逻辑拦截了点击事件
比如按钮所在的布局有没有加GestureRecognizer?或者按钮本身有没有设置Command属性?这些都可能和Clicked事件冲突,导致你的后台事件被跳过。可以先把其他交互逻辑暂时注释掉,只保留Clicked事件,看看断点能不能触发。确认调试器是否正确附加到UWP进程
启动调试后,去Visual Studio的菜单里找调试→附加到进程,看看你的UWP应用进程(通常名字是你的应用包名)是不是已经被选中并附加了。要是没附加,手动选上它,再试试点击按钮。
如果这些步骤都试过还是没解决,建议你新建一个极简的测试项目——只加一个Login页面,放个按钮和点击事件,看看能不能正常触发断点。如果测试项目没问题,那大概率是你当前项目的某个配置或者缓存出了问题,可以逐步迁移代码过去排查。
内容的提问来源于stack exchange,提问作者Annu

