您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    12个Visual Studio调试效率技巧(2)
    时间:2020-07-09 21:34 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    从Visual Studio 2017末尾,重新附加到进程Shift+Alt+P工具被提出,并且十分方便。将调试器附加到某个进程后,Visual Studio会记住它,并建议将调试重视新附加到同一进程。斜体也一样,由于这里有一个关于进程标识的启示式办法:

    假设已附加的进程依然运转着,重新附加到进程,重新附加到它。

    否则,Visual Studio将尝试查找和前一个进程名具有相反称号的单进程,并将调试重视新附加到该进程。

    假设找到几个运用此称号的进程,则翻开“附加到进程”对话框,只显示称号相反的进程

    假设找不到具有此称号的进程,则显示“附加到进程”对话框

    12个Visual Studio调试效率技巧

    重新附加到进程也适用于触及多个进程的调试会话。在这种状况下,Visual Studio会尝试运用上述相反的启示式办法来查找它附加到的一切进程。

    10、在即时窗口和在察看窗口的No-Side-Effect评价

    有时,在即时窗口或监视窗口中评价表达式时,某些形状会更改。这种行为通常时不希望发作的。你不想仅仅由于需求评价表达式的值而破坏调试顺序的形状。这种状况被称为Heisenbug,该术语时物理学家Werner Heisenberg的双关语,它首先断言了量子力学的察看者效应,该现象指出,察看系统的行为不可避免的会改动器形状。

    为了避免更改任何形状,你可以在表达式前面加上nse(No-Side-Effect)。下面的动图阐明了这种能够性(在监视窗口中监视State的值能否有变化)。

    下面这种动图是nse在监视窗口的运用。由于SideEffectFct()所察看的项中有Refresh评价按钮,所以此示例比前一个示例更复杂。

    11、在源码中显示线程

    调试多线程运用顺序是有名的复杂。希望在源码中显示线程按钮能提供很大的协助。它在编辑器的左侧边栏引入标记图标,以跟踪其他线程被暂停的位置。这个标记可以用来显示线程ID,并最终切换到另一个线程。留意:假设至少两个线程在同一位置暂停,则会显示不同的标记符号。

    12个Visual Studio调试效率技巧

    更多调试多线程运用顺序的技巧可以在这个微软文档中找到:Get started debugging multithreaded applications (C#, Visual Basic, C++)

    https://docs.microsoft.com/en-us/visualstudio/debugger/get-started-debugging-multithreaded-apps?view=vs-2019

    下面是这个演示的源代码,假设你想演示它,可以停止参考:

    using System; 

    using System.Threading; 

     

    class Program { 

    static void Main() { 

    for (int i=0; i< 5; i++) { 

    // Avoid capturing a loop variable in the lambda below 

    int j = i; 

    // So 2 thread are blocked on '0' case 

    if (j == 1) { j = 0; }  

    ThreadPool.QueueUserWorkItem(delegate { Method(j); }); 

    Thread.Sleep(60000); 

    static void Method(int id) { 

    switch(id) { 

    case 0

    Thread.Sleep(60000); break

    case 1

    Thread.Sleep(60000); break

    case 2

    Thread.Sleep(60000); break

    case 3

    Thread.Sleep(60000); break

    case 4

    Thread.Sleep(60000); break

    12、从反编译的IL代码中调试源代码

    我们常常依赖一些黑盒组件:我们没有源代码的组件。

    (责任编辑:admin)