C#非常规调试场景总结

场景1:类库独立调试。

方法:可以将类库项目修改成控制台程序,然后增加一个静态的main函数的方式来调试

场景2:程序需要连接数据库,本机调试的时候因为权限问题无法连接上数据库,只能放在服务器上跑

方法:在服务器上开启远程,把vs中的Remote Debugger 文件夹拷贝到服务器,然后打开程序msvsmon.exe,根据显示的端口号。在本机的vs的附加到进程(alt+ctrl+p)窗口的限定符输入对应的服务器msvsmon显示的ip和端口号,之后点击下面的刷新,然后找到对应的进程,双击附加上之后便可以调试。(提示,如果是console程序,可以在程序运行的开始加上一个console.ReadLine(),等调试开始之后再回车使得程序往下执行)

场景3:web项目

方法:直接使用附加到进程调试,找到本机对应项目的w3wp进程。

场景4:项目中需要调试调用其他解决方案中的dll类库。

方法:将dll类库编译之后的bin/debug目录下的pdb文件拷贝到当前项目的bin目录下覆盖,然后在当前项目执行的时候,在类库的解决方案中使用附加到进程找到当前正在运行的项目程序,附加上即可调试类库解决方案:如果是调试web项目,就找对应的w3wp.exe;如果是cs程序,就找对应的应用程序exe(注意,当前项目的运行不能够使用解决方案的debug调试模式运行,这样会导致类库解决方案无法附加到指定进程)

时间: 2024-10-03 08:11:45

C#非常规调试场景总结的相关文章

iOS 开发者旅途中的指南针 - LLDB 调试技术

文章转载于:iOS 开发者旅途中的指南针 - LLDB 调试技术 今天给大家介绍的内容,无关乎任何功能性开发技术,但又对开发的效率影响至深,这就是调试技术. 何为调试呢,比如我们用 print 函数在指定位置进行输出,来定位某些节点的变量内的取值: 12345 let result = parseJSON("[1,2,3]");print(result); result = parseJSON("error");print(result);4 相信我们大家看到类似这

[WPF]如何调试Data Binding

前言 在WPF开发中,将ViewModel中对象绑定到UI上时,会出现明明已经将数据对象Binding到UI,但是UI上就是不显示等等的问题.这篇博客将介绍WPF Data Binding调试相关的内容. 场景一(Binding的属性不存在) ViewModel: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = new ViewMo

.NET框架源码解读之SSCLI的调试支持

阅读源码一个比较快的手段就是在调试器里阅读,这样可以在实际运行SSCLI的过程中,通过堆栈跟踪的方式查看完整的程序执行路径. 当在SSCLI环境里执行一个托管程序的时候,堆栈上通常有托管和非托管代码同时在执行.因此在SSCLI里也支持下面几种调试场景: 调试托管程序:在SSCLI里自带了一个托管调试程序,cordbg.exe.跟调试普通.net程序不同,目前还无法在Visual Studio里调试SSCLI环境下的托管程序,在后面有时间的时候,我们会看一下如何在Visual Studio里添加调

调试术语

原文链接地址:http://blog.csdn.net/Donjuan/article/details/3454597 1.1. 调试模式 调试器可以采用三种模式来调试被调试程序(在下文中,如果没有特别说明的话,简称程序): 一种是直接调试模式,即直接从调试器里面启动程序,就如同我们在Visual Studio里面按下F5就可以调试程序那样. 另外一种是附加(attach)模式,即你可以在程序已经启动的情况下,把你的调试器附加到程序上,进行调试.这种模式通常在调试服务(Service)程序非常有

Fiddler 高级用法:Fiddler Script 与 HTTP 断点调试

之前在<关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享>中系统的介绍过 Fiddler 的原理与一些常见技巧,但那篇文章只是入门科普,并不深入,今天要介绍到的内容相对更加高级与深入,扩展性更好,功能更加强大. 1.Fiddler Script 1.1 Fiddler Script简介 在web前端开发的过程中,fiddler是最常使用的一款调试工具.在大多数情况下,通过fiddler默认菜单的功能就可以基本满足开发者的调试需求,然而如果需要满足更复杂的调试场景时,单纯通过fi

iOS开发之Xcode常用调试技巧总结

两种最常见最普通的方法: 1.NSLog,最简单的方法,查看变结 中是否有值,有什么值,是不是自己需要的值,然后找到bug. 2.po命令,在程序进入断点处,在控制台中输入po 变量名,也可以像NSLog一样查看变量是否有值,有什么值. 今天主要介绍点高大上的方法. 一.Memory Graph Xcode8新增:Memory Graph解决闭包引用循环问题 这个时候就进入了断点模式,可以查看issue面板,注意选择右边Runtime: 有很多叹号说明就有问题了.看内存中object的名字,有一

服务【启动方式】生命周期 通讯

基本概念 Service通常总是称之为"后台服务",其中"后台"一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件: 1.并不依赖于用户可视的UI界面(当然,这一条其实也不是绝对的,如前台Service就是与Notification界面结合使用的) 2.具有较长时间的运行特性 服务的两(三)种启动方式 1.startService方式启动服务 最核心的一句话:当Client

Service之常用方法

(一)StartService 运行Service的方法之一.任何继承于android.content.Context的Android组件(component)都可以使用一个Intent(android.content.Intent)来开启一个Service.Intent里面可以以类对象(Class<?>)或者action进行构造,使用action构造对于初学者来说不太直观,而且action构造的适用范围比类对象构造使用范围更广,所以action构造的方法将在本系列文章后面的内容进行介绍,现在

从通话日志分析android 4.4.2 phone的拨号流程

网上关于拨号流程的文章有很多,大多讲逻辑,本文从logcat输出的日志入手.分析通话流程,还原系统应用真实的调试场景. adb logcat -b main -b radio -v time >> call.log 用如上adb命令将拨号至接通电话的日志输出. 1-01 08:02:07.458 V/OutgoingCallBroadcaster( 786): - Broadcasting intent: Intent { act=android.intent.action.NEW_OUTGO