如果我在这样的调用中得到NullPointerException:
someObject.getSomething().getSomethingElse().
getAnotherThing().getYetAnotherObject().getValue();
Run Code Online (Sandbox Code Playgroud)
我得到一个相当无用的异常文本,如:
Exception in thread "main" java.lang.NullPointerException
at package.SomeClass.someMethod(SomeClass.java:12)
Run Code Online (Sandbox Code Playgroud)
我发现很难找到实际上调用returend null,经常发现自己将代码重构为这样的东西:
Foo ret1 = someObject.getSomething();
Bar ret2 = ret1.getSomethingElse();
Baz ret3 = ret2.getAnotherThing();
Bam ret4 = ret3.getYetAnotherOject();
int ret5 = ret4.getValue();
Run Code Online (Sandbox Code Playgroud)
然后等待更具描述性的NullPointerException,告诉我要查找哪一行.
你们中的一些人可能认为连接getter是一种糟糕的风格,无论如何都应该避免,但我的问题是:我可以在不更改代码的情况下找到错误吗?
提示:我正在使用eclipse,我知道调试器是什么,但我无法弄清楚如何将它应用于问题.
我对答案的结论是:
有些答案告诉我,我不应该一个接一个地连接吸气剂,一些答案显示我如何调试我的代码,如果我不赞成这个建议.
我已经接受了一个答案,这个答案让我知道什么时候连接吸气剂:
这使得对实际调试的任何好建议毫无用处.
我刚才知道有数据断点.我使用Visual Studio在C++工作了5年,从未使用过数据断点.
有人可以了解一下数据断点是什么,何时使用它们以及如何在VS中使用它们?
根据我的理解,当我们想要检查变量值的变化时,我们可以设置数据断点.在这种情况下,我们可以使用变量值的条件设置数据断点.
还有其他例子吗?
c++ debugging breakpoints conditional-breakpoint visual-studio
在我的C#.NET应用程序中,我遇到了Trace.WriteLine()方法的问题.我使用这种方法很多,并且每次使用它时都想添加一个TimeStamp.
而不是Trace.WriteLine(DateTime.Now +"有问题!"),有没有DateTime默认的解决方案?
在我的程序中,我需要创建套接字并将它们绑定到侦听HTTP端口(80).当我从命令行使用sudo启动它时,该程序工作正常,将权限升级到root.在XCode下运行会在调用绑定函数时出现"权限被拒绝"错误(asio :: ip :: tcp :: acceptor :: bind()).
如何在XCode下进行调试?
全部使用XCode 3.1.2在Mac OS X 10.5上使用C++和boost.asio完成.
有没有其他方法可以调试Perl Data::Dumper和perl -d?
我想知道如何使用惰性函数语言实现调试.
你能使用断点,印刷语句和传统技术吗?这甚至是个好主意吗?
我的理解是纯函数式编程不允许副作用,monad除外.
执行顺序也不能保证.
您是否需要为要测试的每个代码段编写一个monad?我想从这个领域更有经验的人那里了解这个问题.
我个人使用的一个小实用程序(用C++编写)昨天随机崩溃(我已经使用它大约100多个小时,到目前为止没有问题)虽然我通常不这样做,但我感觉有点喜欢冒险,想尝试更多地了解这个问题.我决定进入事件查看器,看看Windows记录的崩溃事件:
Faulting application StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Faulting module name : StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Exception code : 0xc0000005
Fault offset : 0x0002d160,
Faulting process id: 0x17b4
Faulting application start time: time 0x01ca238d9e6b48b9.
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些东西意味着什么,我将如何使用它们来调试我的程序?这是我目前所知的:异常代码描述了错误,而0xc0000005是内存访问冲突(试图访问它不拥有的内存).我特别想知道更多有关以下内容的信息:
请注意,我主要是一名C++程序员,所以虽然我对汇编有所了解,但我对它的了解非常有限.此外,这确实不是一个需要修复的严重问题(并且鉴于程序的性质也不容易复制),我只是以此为借口来了解这些错误消息的含义.我在网上找到的关于这些崩溃日志的大部分信息通常都是针对最终用户的,所以他们并没有帮助我(作为程序员).
提前致谢
当我尝试调试因代码中的未处理异常而失败的单元测试时,我希望Visual Studio能够打破未处理的异常,这样我就可以检查代码并找出问题所在.相反,IDE立即退出调试模式,测试列为"失败",让我查阅测试结果的堆栈跟踪以找到问题.
我已经确认IDE被配置为在抛出任何用户未处理的CLR异常时中断.如果我配置IDE以中断所有抛出的异常,我只能得到预期的行为.当然,这可以正常调试PITA.
我运气不好吗?
假设我有10个断点,我想清除一个而不是其他9个断点.
如果我在要删除的断点上切换断点,则在下次重新启动应用程序时它会重新启动.我知道永久摆脱它的唯一方法是清除所有断点,我宁愿不做,因为我必须重置其他9.
在任何VS版本中有更好的方法吗?
对于从CMD窗口运行而不是由F5启动的控制台应用程序,如何"附加到进程..."?我问的原因是因为应用程序需要命令行参数,我希望有一个真实的经验.
我甚至依附CMD.exe,但没有运气,或设置一个断点使用Console.ReadKey()也没有运气.我在这里有点不知所措.
这可能吗?