标签: debugging

.NET的Visual Studio调试器提示和技巧

我已经和VS的调试器一起工作多年了,但我偶尔会遇到一个我以前从未注意过的功能,并且想想"该死的!我怎么能错过它?它非常有用!"

[免责声明:这些提示适用于VS 2005中的C#项目,不保证VS或其他语言的旧版本]

跟踪对象实例

使用给定类的多个实例?你怎么能分开他们?在垃圾收集前编程时,很容易跟踪引用 - 只需查看内存地址即可.使用.NET,你不能这样做 - 对象可以移动.幸运的是,通过手表视图,您可以右键单击手表并选择"创建对象ID".

手表查看http://img403.imageshack.us/img403/461/52518188cq3.jpg

这会在实例的值之后附加{1#},{2#}等,从而有效地为实例提供唯一标签.它看起来像这样:

编号实例http://img383.imageshack.us/img383/7351/11732685bl8.jpg

标签在该对象的生命周期内保持不变.

观察变量的有意义值

默认情况下,监视变量的值是它的类型.如果你想看到它的字段,你必须扩展它,如果有很多字段或它们做了一些复杂的事情,这可能需要很长时间(甚至超时!).

但是,某些预定义类型显示更有意义的信息:

  • 字符串显示其实际内容
  • 列表和词典显示其元素数等.

有意义的信息http://img205.imageshack.us/img205/4808/37220487md1.jpg

拥有我自己的类型不是很好吗?

嗯...

...使用.NET Reflector的一些高质量时间显示了使用DebuggerDisplay我的自定义类型上的属性可以轻松实现这一点:

[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
    public string Name { get { ... } }
    ...
}
Run Code Online (Sandbox Code Playgroud)

......重新运行,......

ta da!http://img60.imageshack.us/img60/926/79816018ha1.jpg

这里有关于这个主题的更多信息:MSDN

打破所有例外

......甚至是代码处理的!我知道,自从我出生以来,我就是一个不知道这一点的人,但无论如何它都在这里 - 也许有一天这会对某人有所帮助:

每次抛出异常时,您都可以强制调试进程进入调试模式.曾经花了几个小时寻找一个只是为了遇到这样的代码吗?

try {
    runStrangeContraption();
} catch(Exception ex) {
    /* TODO: Will handle this error later */
}
Run Code Online (Sandbox Code Playgroud)

在这些情况下捕获所有异常非常方便.这可以从Debug> Exceptions ...(Ctrl-Alt-E)启用.勾选"Thrown"列中的框,了解您需要的每种类型的例外情况.


那对我来说是一些前额拍打的时刻.你愿意分享你的吗?

.net debugging hidden-features visual-studio

70
推荐指数
7
解决办法
8854
查看次数

如何在调试java程序时在eclipse中执行某些功能?

像firebug一样调试javascript,

eclipse中有这样的功能吗?还是我需要一个插件?

java eclipse debugging

70
推荐指数
6
解决办法
6万
查看次数

如何使用std :: string创建条件断点

假设我有这个功能:

std::string Func1(std::string myString)
{
   //do some string processing 
   std::string newString = Func2(myString)
   return newString;  
}
Run Code Online (Sandbox Code Playgroud)

如何在newString具有特定值时设置条件中断?(不改变来源)

设定条件 newString == "my value"

没有工作断点被禁用,错误"找不到重载的运算符"

debugging conditional-breakpoint visual-studio

70
推荐指数
6
解决办法
5万
查看次数

从MySQL中的存储过程打印调试信息

MySQL中有没有办法将调试消息打印到stdout,temptable或logfile?就像是:

  • print 在SQLServer中
  • DBMS_OUTPUT.PUT_LINE 在Oracle中

mysql debugging

70
推荐指数
5
解决办法
18万
查看次数

什么是w3wp.exe?

WCF在本地系统上的服务用户下运行服务.每次我尝试调试它都会给我一个消息Attach Security warning.

在Visual Studio中,默认情况下(即使没有附加),我收到此错误:

附加到此过程可能会损害您的计算机.如果以下信息看起来可疑或您不确定,请不要附加到此过程

名称:C:\ Windows\System32\inetsrv\w3wp.exe

什么是w3wp.exe?根据Google搜索,我认为它与IIS有关.但是它做了什么?应该更改哪些设置,以便每次尝试在本地系统上调试时都不会显示此消息?

iis debugging wcf iis-7 w3wp

70
推荐指数
3
解决办法
20万
查看次数

在顶层函数中定义的内部函数测试和交互的最佳方法是什么?

当我使用Javascript编程时,我发现能够使用调试器在任何时候停止程序执行并且能够运行命令并从那里检查变量非常方便.

现在,回到Haskell,有没有办法在交互式GHCI REPL中运行任意函数,还是仅限于在顶层声明的内容?

工作和调试内部函数和值的"标准"方法是什么?

debugging haskell ghci read-eval-print-loop

70
推荐指数
1
解决办法
2092
查看次数

在Android中查看活动堆栈

是否可以在Android中查看活动堆栈以进行调试?

debugging stack android android-activity

69
推荐指数
1
解决办法
3万
查看次数

node.js的IDE和Debugger

我将开始在node.js中构建项目(以前在PHP中工作),node.js的IDE,调试器和帮助工具是什么,以帮助改进编码?

ide debugging node.js

69
推荐指数
7
解决办法
4万
查看次数

python pdb - 跳过循环

如何跳过循环使用pdb.set_trace()

例如,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')
Run Code Online (Sandbox Code Playgroud)

pdb在循环之前提示.我输入一个命令.返回所有1-5个值,然后我希望pdbprint('Done!')执行之前再次提示.

debugging pdb

69
推荐指数
2
解决办法
2万
查看次数

如何将Visual Studio附加到尚未启动的进程?

我有.NET程序,由于某些原因(从Excel 2010模板项目创建的Excel文件)无法从Visual Studio运行,我需要调试启动事件.

如果我想调试程序初始化后出现的事件,则没有问题.我从资源管理器运行该程序,将该过程附加到Visual Studio并在代码中添加一些断点.但在这里,我需要在启动事件上加上断点.我需要能够将进程附加到Visual Studio,不依赖于PID,而是依赖于特定的进程名称或任何其他可行的解决方案.

当然Thread.Sleep(1000)在我的启动事件中添加一个让我有时间在Visual Studio中附加进程是不可能的!

debugging process visual-studio

69
推荐指数
6
解决办法
4万
查看次数