只要一个进程中断,就中断所有进程

c#中总是提示“在代码运行时或者在禁用“只要一个进程中断,就中断所有进程”选项时,

不允许进行更改。
但是根据它提示的修改方法,还是提示这个。

“此选项可在“工具”->“选项”->“调试”中启用。”

根本不起作用,后来试着,要这样操作:

工具->选项->调试->编辑并继续->启用编辑并继续
不选择“启用编辑并继续”,这样就OK啦,
========

VS2010调试之“编辑并继续”

http://blog.csdn.net/xiaoxian8023/article/details/7220590

程序的调试是任何一个程序必做的“功课”,当然在调试的过程中肯定会或多或少的遇

到一些问题。如果每次关掉,修改,然后在启动,浪费不少时间和经历,尤其是在不确定的

情况下尝试修改,启动的次数会更多。如果你要调试的系统太大,做优化有关“股票”软件

计算算法的那样,光初始化就需要5分钟左右,无疑是个晴天霹雳,估计没几个人想去调试它


       如果在调试的过程中,可以修改代码,那就可以节省很多时间了。VS2010提供了这些

功能,而且是默认开启的。如果你不小心关掉了,请跟着我重新设置一遍吧。
       首先要开启“编辑并继续”功能,当然并不是VS2010的任何版本都可以用的,详情请

看:

开启很简单,打开“工具”—》“调试”—》“编辑并继续”—》勾选 启用“编辑并继续”

即可。需要注意的是,在调试过程中不可以更改此设置。
 
       当然现在也不一定就可以了直接使用“编辑并继续”功能了,说说我遇到的问题,在调

试过程中,当程序运行到断点以后,想要更改程序,却不能更改。不过好在弹出了一个对话

框,给我指明了“前进”方向:

按着对话框中的提示,找到调试-常规里的“一个进程中断时则中断所有进程”,勾选后确定

即可。
 
不过,我的操作系统是64位的,还遇到了另外一个问题,在修改时,提示“不允许对64位应

用程序进行更改”。

一开始我还以为是对64位的“优待”呢,不过一定有人有办法可以解决。在百度上没有搜到

,然后就去msdn上找,还真找到了。MSDN上这样解释的:

(http://msdn.microsoft.com/zh-cn/library/ba77s56w.aspx 或

http://msdn.microsoft.com/en-us/library/ba77s56w.aspx)
按着提示,右击项目,选择“属性”,在左侧点击“编译”选项,然后在最下面找到“高级

编译选项”,打开后,将目标CPU修改为x86。如图:

做如此修改后,终于可以在调试的时候,修改程序了。大大节省了调试的时间。
当然调试技巧也是不可或缺的,有兴趣的朋友可以阅读的上一篇博文:《VS2010调试技巧》
========

Visual Studio调试之符号文件

http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html
前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶篇提到了调试符号文件及其

作用,这篇文章我将要介绍调试符号文件的一些用法,如果你已经很熟悉调试文件的话,尽

可以跳过本文。

调试符号文件为调试器提供了从二进制机器代码地址到源代码文本文件代码行的映射.因此有

了符号文件,我们才能:

1.       设置断点,因为调试器需要符号文件提供的映射关系,将源代码行的行号转换成对应的机

器代码的地址。
2.       查看程序堆栈,简单地说,就是调试器使用映射关系将堆栈里面的地址转换成包含这个地

址的函数名。
3.       查看变量的值,对于机器来说,所有的变量都只是一个内存地址,程序在读取变量值

的时候,只不过按照变量所属的类型来读取指定大小的内存而已。
4.       甚至调用程序的一些函数,比如原生(Native)程序,经过编译以后,在程序里面实

际上只变成了一段机器代码。我们在立即窗口里面调用一个C++函数的时候,调试器需要将

函数名翻译成对应的机器代码的起始地址,当然还要遵循一定的函数调用规则才能调用这个

函数。

我们一个一个地看符号文件的功能:

查看程序堆栈

将Visual Studio以原生程序(Native)调试模式附加到一个已打开的记事本程序上(附:因

为我的系统都是英文版,所以中文菜单都是对着英语直接翻译的,有的会翻译的不准确,所

以我会把英文的命令附在后面),然后中断记事本进程的执行 — 通过点击VS菜单里面的“

调试(Debug)”-“全部中断(Break All)”。

下面是具体的将VS附加到记事本进程的操作(不好意思,录制的视频太大,不知道怎么传)

1.       点击Visual Studio里面的“工具(Tools)”- “附加到进程……(Attach to Process

…)”。
2.       选择notepad.exe,当然你要保证“附加到… (Attach To…)” 文本框里面列出的调试

类型是“原生程序(Native)”。
3.       点击确定以后,将Visual Studio附加到刚刚打开的记事本进程。

这个时候打开堆栈(Stack)窗口,你应该会看到类似下面的结果:

上面的堆栈,我也看不懂(我的机器是64位的Windows 7,所以地址都是8个字节的)。因

此我们需要一些东西来帮我们把难理解的地址(鸟语)翻译成有意义的文字,这个工作就是

由符号文件来完成的。

因为记事本是操作系统自带的程序,我们当然没有办法自己生成它对应的符号文件啦,但是

幸运的是,微软早就已经考虑到可能有一些人需要调试Windows内核—例如写驱动程序的程

序员,因此微软公司已经将Windows的一些符号文件公开了,公开的地址在:

http://msdl.microsoft.com/download/symbols

在 Visual Studio里使用的方法是:

1.       点击菜单栏里面的“工具(Tools)”—“选项(Options)”。
2.       在“选项(Options)”对话框左边的列表框里面选择“调试(Debugging)”-“符

号文件(Symbols)”。
3.       如果你的Visual Studio是Visual Studio 2008 SP 1,那么点击“从微软的符号文件服

务器上加载符号文件(Load symbols from Microsoft symbols server)”就可以了。
4.       如果是其他版本-当然是低一些的版本,在右侧的“符号文件路径(Symbol file

(.pdb) locations)”列表框里面添加新的一行,将上面的链接输入进去。

然后在“将符号文件缓存到这个文件夹(Cache symbols from symbol servers to this

directory:)”文本框里输入你要缓存从服务器下载的符号文件的文件夹路径—毕竟那个服务

器是在美国。如下图所示:

5.       点击“确定( OK)”
6.       对于听说英文没有困难的朋友,可以直接参考下面的链接学习如何设置:
http://support.microsoft.com/kb/311503/zh-cn

等待一段很长的时间以后—因为调试器要一个个下载记事本程序所引用到的所有动态链接库

文件的符号文件,你应该可以看到类似下面的堆栈信息:

这篇文章的描述里面,我希望你能够明白调试符号文件的重要性:

1.       如果没有调试符号文件,那么就不能查看堆栈—这话好像有点多余。但是很多时候,

我们在分析验尸调试所保存的内存文件的时候,第一步要看检查的就是,程序崩溃的时候,

堆栈是什么样子的,如果没有调试符号文件,那我们就什么也做不了了。
 
2.       那么调试符号文件是如何生成的呢?调试符号文件是由编译器生成的,因为编译器负

责将文本格式的源代码文件翻译成二进制的程序,所以二者之间的映射关系编译再清楚不过

了。每次重新编译的时候,编译器都会生成对应的调试符号文件。

生成调试符号文件的命令:

编程语言

编译器

命令行参数

C#

csc.exe

/debug[:full]

C++/C

cl.exe

/Zi

或者

Link.exe的/debug选项

3.       例如一个客户跟你抱怨程序不能工作,出现了严重的错误(Bug),但是他正在运行

的是1.0版本的程序,而你们公司却已经再开发2.0版本的程序了。由于源代码一般都不会给

客户,这个时候如果能够找到原始的1.0 版本的源代码重新编译,然后安装到客户机重现一

下固然是好,但是为什么不直接保存1.0版本的调试符号文件,在调试的时候,直接让调试器

自己去找源代码呢?这里涉及到符号文件服务器和源代码文件服务器的合作问题,后面的文

章里可能会介绍到。
========

选项”对话框 ->“调试”->“常规”

https://msdn.microsoft.com/zh-cn/vstudio/85yzd16c(v=vs.89)
若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档。

“工具”/“选项”/“调试”/“常规”页允许你设置以下选项:

在删除所有断点之前询问
在完成“删除所有断点”命令前需要进行确认。

一个进程中断时则中断所有进程
发生一个中断时,同时中断调试器连接到的所有进程。

当异常跨越应用域或托管/本机边界时中断
在托管或混合模式调试中,如果满足以下条件,公共语言运行时可能会捕获跨越应用程序域

边界或托管/本机边界的异常:

1) 当本机代码使用 COM 互操作调用托管代码而托管代码却引发异常时。 请参阅 COM 互

操作介绍。

2) 当在应用程序域 1 中运行的托管代码调用应用程序域 2 中的托管代码,而应用程序域 2

中的代码却引发异常时。 请参阅 使用应用程序域编程。

3) 当代码使用反射调用一个函数而该函数却引发异常时。 请参阅 反射。

在第 2) 和 3) 条中,异常有时由 mscorlib 中的托管代码而不是公共语言运行时捕获。 此选

项不影响在 mscorlib 捕获到异常时中断。

启用地址级调试
启用在地址级上进行调试的高级功能(“反汇编”窗口、“寄存器”窗口和地址断点)。

源代码不可用时显示反汇编
在你尝试调试源不可用的代码时自动显示“反汇编”窗口。

启用断点筛选器
允许你在断点上设置筛选器,使其仅影响特定的进程、线程或计算机。

启用异常助手
仅用于托管代码。 托管异常打开“异常助手”对话框。 请参阅 Exception Assistant。

在未经处理的异常上展开调用堆栈
导致“调用堆栈”窗口将调用堆栈回滚到未经处理的异常发生之前的时间点。

启用“仅我的代码”
调试器仅显示和单步执行用户代码(“我的代码”),而忽略系统代码和其他经过优化或没

有调试符号的代码。

在变量窗口中显示非用户对象的所有成员(仅限 Visual Basic)
启用非用户代码(不是“我的代码”)中对象内的非公共成员的显示。

启动时若没有用户代码则发出警告
如果在调试时启用“仅我的代码”,此选项会在没有用户代码(“我的代码”)的情况下发

出警告。

启用 .NET Framework 源代码单步执行
允许调试器单步执行 .NET Framework 源代码。 自动启用此选项会禁用“仅我的代

码”,.NET Framework 符号将下载到缓存位置。 可以在“选项”对话框“调试”类别下的

“符号”页中更改缓存位置。

逐过程执行属性和运算符(仅限托管)
使调试器无法单步执行托管代码中的属性和运算符。

启用属性求值和其他隐式函数调用
在变量窗口和“快速监视”对话框中打开属性的自动求值和隐式函数调用。

在变量窗口中对对象调用字符串转换函数(仅限 C# 和 JavaScript)
在变量窗口中计算对象时,执行隐式字符串转换调用。 因此,结果将显示为字符串而不是类

型名。 仅在 C# 代码中进行调试时适用。 此设置可以由 DebuggerDisplay 特性重写(请参

阅 使用 DebuggerDisplay 特性)。

启用源服务器支持
指示 Visual Studio 调试器从实现 SrcSrv (srcsrv.dll) 协议的源服务器中获取源文件。 Team

Foundation Server 和 Windows 的调试工具是实现协议的两个源服务器。 有关 SrcSrv 设

置的更多信息,请参阅“Windows 的调试工具”文档。 此外,请参阅 指定符号 (.pdb) 和

源文件。

System_CAPS_ICON_important.jpg 重要事项
由于读取 .pdb 文件会执行文件中的任意代码,因此请确保你信任此服务器。

将源服务器诊断消息打印到输出窗口
如果启用源服务器支持,此设置会打开诊断显示。

允许源服务器中的部分信任程序集(仅限托管)
如果启用源服务器支持,此设置会重写不为部分信任的程序集检索源的默认行为。

为断点和当前语句突出显示整个行
调试器突出显示断点或当前语句时,会突出显示整个行。

要求源文件与原始版本完全匹配
指示调试器验证源文件是否与用于生成正在调试的可执行文件的源代码版本匹配。 如果版本

不匹配,则会提示你查找匹配源。 如果未找到匹配源,则在调试过程中不会显示源代码。

将所有输出窗口文本重定向到即时窗口
将通常显示在“输出”窗口中的所有调试器消息改为发送到“即时”窗口。

在变量窗口中显示对象的原始结构
关闭所有对象结构视图自定义。 有关视图自定义的更多信息,请参阅显示自定义数据类型。

在模块加载时取消 JIT 优化(仅限托管)
如果附加调试器,则在加载模块并编译 JIT 后,禁用托管代码的 JIT 优化。 禁用优化可能更

易于调试某些问题,尽管这会降低性能。 如果正在使用“仅我的代码”,则禁用 JIT 优化会

导致非用户代码显示为用户代码(“我的代码”)。

启动时若无符号则发出警告(仅限本机)
如果尝试调试在调试器中没有对应符号信息的程序,则会显示警告对话框。

如果启动时禁用了脚本调试,发出警告
如果在启动调试器时禁用了脚本调试,则会显示警告对话框。

加载 DLL 导出
加载 DLL 导出表。 处理 Windows 消息、Windows 过程 (WindowProc)、COM 对象、封

送或不具有其符号的任何 DLL 时,DLL 导出表中的符号信息将很有用。 读取 DLL 导出信息

会占用一些系统开销。 因此,默认情况下此功能被禁用。

若要查看 DLL 导出表中的可用符号,请使用 dumpbin /exports。 符号可用于任何 32 位系

统 DLL。 从 dumpbin /exports 输出中,可以查看到精确的函数名,包括非字母数字字符。

这对于在函数上设置断点很有用。 DLL 导出表中的函数名在调试器的其他位置似乎被截断了

。 调用将按调用顺序列出,当前函数(嵌套最深的函数)位于顶端。 有关详细信息,请参

阅 dumpbin /exports。

自下而上显示并行堆栈关系图
控制“并行堆栈”窗口中堆栈的显示方向。

如果写入的数据未更改值,则忽略 GPU 内存访问异常
如果数据未改变,则忽略在调试期间检测的争用条件。 有关详细信息,请参阅 调试 GPU 代

码。

使用托管兼容模式
将默认调试引擎替换为旧版本,以支持以下方案:

使用除 C#、VB 或 F# 之外,拥有自己的表达式计算器(包括 C++/CLI)的其他 .NET

Framework 语言。

在执行混合模式调试时,你想要为 C++ 项目启用“编辑并继续”。

注意,选择托管兼容模式会禁用仅可在默认调试引擎中实现的一些功能。

使用本机兼容性模式
选中此选项后,调试器使用 Visual Studio 2010 本机调试器而不是新的本机调试器。

因为新的调试引擎不支持计算 .NET C++ 表达式,因此应在调试 .NET C++ 代码时使用此

选项。 但是,启用本机兼容模式会禁用依赖于当前调试器实现来操作的许多功能。 例如,

旧引擎缺少内置类型的很多可视化工具,比如 Visual Studio 2015 项目中的 std::string。

请在这些情况下使用 Visual Studio 2013 项目以便获得最佳的调试体验。

使用旧版 C# 和 VB 表达式计算器
调试器将使用 Visual Studio 2013 C# /VB 表达式计算器,而不是基于 Visual Studio 2015

Roslyn 的表达式计算器。

当对潜在的不安全代码使用自定义调试器可视化工具时会发出警告
当你使用在调试对象进程中运行代码的自定义调试器可视化工具时,Visual Studio 会对你发

出警告,因为它可能在运行不安全代码。

启用 Windows 调试堆分配器(仅限本地)
启用 Windows 调试堆以改进堆诊断。 启用此选项会影响调试性能。

启用 XAML 的 UI 调试工具
在开始调试 (F5) 支持的项目类型时,将显示“实时可视化树”和“实时属性资源管理器”窗

口。 有关详细信息,请参阅 在调试时检查 XAML 属性。

预览实时可视化树中的所选元素
选定了其上下文的 XAML 元素在“实时可视化树”窗口中也会被选中。

调试时启用诊断工具
在进行调试时,将显示“诊断工具”窗口。 有关详细信息,请参阅 集成了调试器的诊断。

在调试过程中显示运行时间PerfTips
在进行调试时,代码窗口会显示给定方法调用的运行时间。

启用“编辑并继续”
在进行调试时,你可以使用“编辑并继续”功能。

启用本机“编辑并继续”
在调试本机 C++ 代码时,你可以使用“编辑并继续”功能。 有关详细信息,请参阅 编辑并

继续 (Visual C++)。

在继续时应用更改(仅限本机)
在从中断状态继续该过程时,Visual Studio 会自动编译并应用你所做的任何未完成的代码更

改。 如果未选中,你可以选择使用调试菜单下的“应用代码更改”项来应用更改。

就陈旧的代码发出警告(仅限本机)
收到关于陈旧代码的警告。

允许预编译(仅限本机)
允许预编译。
========

C# 调试方法之即时窗口输出

http://www.cnblogs.com/clock2008/archive/2011/07/15/2107239.html
1,非中断模式下的调试。

利用系统“输出”窗口。(视图-输出)来打印调试信息。有Debug和Release两种版本,通

过运行按钮右边的选项可以选择程序的运行方式。而对应的现实调试信息的方法也不同。

注意 :一定要先设置一下IDE的选项,如下图,多的话就不多说了。

调用前声明:

using  System.Diagnostics;

调用方式:

Debug.WriteLine();

Debug.WriteLineIf();//两个参数,当第一个参数为true时,第二个参数的调试信息会显示出

来。

Trace.WriteLine();//Release版本,当然Debug中也可以显示

Trace.WriteLineIf();//同上

除了上述可以通过代码的方式来进行调试外,还有一种可以再程序中添加跟踪点的方式。

右键代码行-断点-插入跟踪点。

弹出的窗体时输入显示信息的,如果显示变量用{}括起来。

看到跟踪点是菱形的。

查看所有断点(包括跟踪点)在调试-窗口-断点。

程序运行到跟踪点时,会打印调试信息的。可以看到当程序以Release方式运行时,是不显示

信息的。

2,中断模式的调试

断点的配置:

遇到断点立即进入中断模式。

遇到断点时如果布尔表达式值为true,就进入中断模式

遇到断点时,如果自从上次遇到断点以来变量的值发生了变化,就进入中断模式

遇到某断点一定的次数后,进入中断模式

遇到断电时,如果是上次遇到断点以来变量的值发生了变化,就进入中断模式

把文本输出到调试窗口中,或执行一个宏

断点的添加:

右键-插入断点,或 F9

再次右键,可以看到一些配置信息:条件,命中次数等。

调试-窗口-即时窗口

可以输入指令,求表达式结果等。还可以修改变量值。
========

VS 工具-选项对话框 调试选项相关学习总结相关推荐

  1. Appium 移动端自动化 - Android SDK连接安卓手机,adb连接一加8手机USB调试实例演示,连接一加8手机不显示USB调试选项问题排查

    Android SDK 连接安卓手机过程演示 第一章:一加8手机连接过程 ① 启用开发者模式 ③ 开发者选项启用 USB 调试 ③ 手机连接 USB 调试 ④ 手机连接不显示 USB 调试选项问题排查 ...

  2. Bootstrap3 模态对话框的选项

    模态对话框的选项 Bootstrap为模态对话框提供了 4 个选项,所有的选项都可以通过 data 属性或JavaScript进行设置.见表 4‑1: 表 4‑1 modal插件的选项 名称 类型 默 ...

  3. JavaScript学习(六十二)—解析选项和序列化选项

    JavaScript学习(六十二)-解析选项和序列化选项 一.解析选项 格式:JSON.parse(参数1,参数2); 参数说明 参数1:表示要转换为JS对象的json字符串 参数2:表示将json转 ...

  4. VC调试选项说明:md /mdd /ml /mt/mtd

    VC调试选项说明:md /mdd /ml /mt/mtd 1. VC编译选项 多线程                             (/MT) 多线程调试                   ...

  5. 《深入分析GCC 》——2.5 GCC调试选项

    本节书摘来自华章出版社<深入分析GCC >一书中的第2章,第2.5节,作者 王亚刚 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.5 GCC调试选项 G ...

  6. Android开启开发者选项和调试模式

    有些设备,一重启,调试就关了,贼烦,以下通过代码使开发者选项和调试模式在开发调试时默认打开. 首先是权限: <uses-permission android:name="android ...

  7. 绑定对话框和选项按钮

    绑定对话框和选项按钮 功能说明: 单选对话框:点击选择按钮,跳出单选对话框,单选对话框被点击后,单选按钮状态随之改变. 多选对话框:点击选择按钮,跳出多选对话框,对话框被点击后,多选框状态随之改变. ...

  8. 转载 ----MAVEN相关学习

    呈顼I渝 Maven的安装.配置及使用入门 本书代码下载  大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系 ...

  9. 基于windows PE文件的恶意代码分析;使用SystemInternal工具与内核调试器研究windows用户空间与内核空间...

    基于windows PE文件的恶意代码分析:使用SystemInternal工具与内核调试器研究windows用户空间与内核空间 ******************** 既然本篇的主角是PE文件,那 ...

最新文章

  1. linux字符设备驱动架构,linux驱动开发--字符设备:cdd_cdev结构中private_data使用
  2. 【摘录】手机操作系统三国时代的结束
  3. [T-ARA][Goodbye, OK]
  4. 2021-04-05 Python tqdm显示代码任务进度
  5. 选择不相交区间(贪心:求不相交区间最多个数)
  6. lua 函数回调技巧
  7. overscroll-behavior称为“滚动链”
  8. python 中 * 的使用和表示含义
  9. ajax中的application/x-www-form-urlencoded中的使用
  10. redhat enterprise linux5.4.iso,版本有RedHat Enterprise Linux(RHEL)5.4/5.5/5.8/6.0/6.3 ISO镜像文件下载地址...
  11. 在线小说阅读器app
  12. [中文/英文]VC6 sp6补丁下载|VS6 sp6补丁下载 [防VC6link死机]
  13. 【前端】js关于鼠标划过事件
  14. c语言输出行末无空格_三个简单的C语言程序
  15. 怎样在苹果电脑上用移动硬盘(使用NTFS格式硬盘)?
  16. 【多任务优化】DWA、DTP、Gradnorm(CVPR 2019、ECCV 2018、 ICML 2018)
  17. 分布式多爬虫系统——架构设计
  18. 通达信指标公式编写常用函数(四)——EVERY、COUNT
  19. 看完了就不会有人再感慨奶粉事件了
  20. Linux中的进程、线程和文件描述符

热门文章

  1. hive udf 分组取top1_Hive分组取Top K数据
  2. python字典的数据结构_Python数据结构之三——dict(字典)
  3. Get Started with Omni-Channel
  4. 常用注解[spring 的 java 配置] ||springboot 热部署
  5. 全局配置文件:mybatis-config.xml
  6. 网络爬虫(Web crawler)|| 爬虫入门程序
  7. Docker selenium自动化 - 修改/dev/shm路径大小实例演示,“session deleted because of page crash“问题解决
  8. leetcode C++ 46. 全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列。
  9. MySQL新建匿名用户_初始化MySQL用户(删除匿名用户)
  10. 【mysql问题】foreign key without name 解决方法