我遇到了一些我想有效解决的问题,也许你们中的一些人也会从中学到东西。
我犯了一个错误,因为我使用printf(或在我的情况下可能是std::cout)调试了应用程序。
一切顺利,我删除了我的错误并遇到了其他问题。
现在,我正处于调试输出消失的阶段,但现在找不到了。
搜索文本并没有显示出来,而且由于许多非调试的打印内容,因此毫无希望。
此外,我没有打印多于一个变量的值,所以我不知道它的名称,也无法搜索此特定值,因为它不在源代码中。
我记得一些简洁的linux命令,它将所有系统调用记录在它包装的应用程序中。
是否可以使用此工具查找进行调试打印的行?
(我会用它,因为90%的输出是此调试打印件,所以我认为我应该很快找到它)
当然,如果您知道解决此问题的更好方法,欢迎发布您的解决方案。
谢谢
编辑
不要对建议我使用版本控制的每个人发表评论:我已经使用SVN。
不幸的是,我不知道何时输入调试消息。
最糟糕的情况是我的初始提交已经包含了它。
grep伙计们:这不会比文本搜索好多少,因为它将给我每个人
包含print / std::cout的行,并且没有上下文,所以我什至无法决定是否
这是所有其他调试之间的一条调试线。
对于所有告诉我/认为我做这些事情的愚蠢的人:好吧,正如我在这篇文章中键入的一样,我注意到了;)
但是,我要说的是,这一切都归因于我以前的懒惰,所以让这成为大家的一个例子,懒惰如何导致以后的工作更多。
我只需要一个调试打印,所以我决定以肮脏的方式对其进行编码。如果更多,我可能会使用更好的。
解决了
终于我找到了,运气不错。
这是一个std::cout,它隐藏在代码的更深处(只有几个包含所有基本库的基类都是系统库)。
我尝试使用带有-F1的grep方法查看任何注释,并在grep通过时在屏幕上出现问题的行。
最佳答案
如果是printf
,请执行一个将调用printf
的宏,并在其中添加文件名和行号(即__FILE__
和__LINE__
)。只需命名宏printf
并为原始函数调用::printf
。
如果是cout
-有点棘手,但是您可以尝试在此处放置断点并查看从何处调用断点,最后将找到它。
下一次-始终使用专用的调试打印功能或包装宏,这些功能可以通过一个编译器开关轻松地与其余代码分开。
关于c++ - 找到调试printf将其删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6498284/