首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >快速跟踪/查找对printf或cout的调用(丢失已久的调试输出)

快速跟踪/查找对printf或cout的调用(丢失已久的调试输出)
EN

Stack Overflow用户
提问于 2013-10-02 08:51:32
回答 4查看 1.5K关注 0票数 0

我的程序打印了几个随机数字和字符。它将来自我留下的一些调试代码。它可能是在我最近更改的一些东西中间接打开的。即使在快速浏览了我的库之后,我也不知道它是从哪里来的。

如何轻松追踪打印调用的来源?

(它将是printfcout <<之一)

我假设这与gdb类似,每次写入标准输出时都会产生堆栈跟踪。从现在开始,我肯定会采取一种预防性的方法,但只对可能的解决方案感兴趣。

EN

回答 4

Stack Overflow用户

发布于 2013-10-02 08:55:31

宏可以帮助你。在宏定义中,您可以使用__FILE____LINE__ (以及其他类似的宏)来打印位置信息。

下面是一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

#define mycout std::cout <<  __FILE__  << "(" << __LINE__ << ") "
#define cout mycout

int main()
{
    cout << "Hello";
}

它打印文件名和行号,然后显示您的消息(本例中为"Hello")。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main.cpp(8) Hello

Online Demo

票数 2
EN

Stack Overflow用户

发布于 2013-10-02 09:06:44

如果除了您正在寻找的控制台输出之外,没有太多其他控制台输出,那么现在就是使用调试器的时候了。首先,使用coutprintf语句编写一个小示例程序。调试到调用中以查看它们的实现,并在那里放置一个断点。对于printf,您可能必须在汇编程序中执行此操作。

一旦有了这些断点,就在调试器中运行程序并等待,直到命中断点-调用堆栈应该告诉您对printf/cout的调用在哪里。

票数 2
EN

Stack Overflow用户

发布于 2013-10-02 09:54:47

看起来可以完成这项工作。特别是能够使用-e trace=...选项仅跟踪特定的系统调用,以消除混乱。您还可以通过... 2>&1 | grep -C 20 ...找到确切的打印调用。

这是该工具的给定示例输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
write(1, "bar again\n", 10)             = 10
  > write() ../sysdeps/unix/syscall-template.S:82
  > _IO_new_file_write() fileops.c:1277
  > _IO_new_do_write() fileops.c:531
  > _IO_new_file_overflow() fileops.c:889
  > _IO_puts() ioputs.c:40
  > bar() [/home/pgbovine/strace-plus/hello]
  > foo() [/home/pgbovine/strace-plus/hello]
  > main() [/home/pgbovine/strace-plus/hello]
  > __libc_start_main() libc-start.c:258
  > _start() [/home/pgbovine/strace-plus/hello]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19133221

复制
相关文章
qDebug | std::cout | printf性能表现
  通过使用qDebug,std::cout,printf在1秒内打印的字符串数据。
Qt君
2019/10/23
1.5K0
qDebug | std::cout | printf性能表现
C/C++中输入输出格式那些事!!! cin cout scanf printf
          cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<endl; 
种花家的奋斗兔
2020/11/13
5210
C/C++中输入输出格式那些事!!!  cin cout scanf printf
std::cout彩色输出
想写这个东西其实是因为最近要写个命令行的工具,但是有个问题是什么呢?就是传统的那个黑漆漆的窗口看起来很蛋疼。并且完全看不到重点,于是就想起来这么一个东西。相对来说针对*nix的系统方法会比较通用一些,而windows下这个东西需要用到专门的Windows相关的api来实现。
obaby
2023/02/23
8650
C语言的printf输出格式
1、控制小数点后有多少位:printf(“%.10lf\n”,f_a); //将浮点数f_a输出时,输出其小数点后10位,默认是输出小数点后6位。
全栈程序员站长
2022/09/15
2.7K0
cout格式化输出
ostream类是从ios类派生而来,ios类是从ios_base类派生而来。ios_base类存储了描述格式状态的信息,例如一个类成员中某些位决定使用哪个计数系统(如八/十/十六进制),另外一个成员决定字段的宽度,且ios_base是ostream间接基类,因此ostream也可以修改计数系统和字段宽度。
艰默
2023/02/26
1.5K0
cout格式化输出
C语言 | printf输出函数
输出是以计算机主机为主体而言的,从计算机向输出设备输出数据称为输出,C语言本身不包含输出语句,如果不加头文件,下述代码就会报错。
小林C语言
2021/03/19
3.3K0
C语言 | printf输出函数
C++ cout格式化输出
C++ 中常用的输出流操纵算子如表所示,它们都是在头文件 iomanip 中定义,要使用这些流操纵算子,必须包含该头文件。
字节星球Henry
2021/08/09
1.1K0
【说站】c语言printf输出函数的介绍
函数原型在头文件stdio.h中。但是作为特例,在使用printf函数之前,不需要包含stdio.h文件。
很酷的站长
2022/11/24
6540
cout输出格式不常用情况
对于cout,很多用习惯了C语言的printf的人们,多少对cout都是敬而远之。因其复杂繁多的格式控制操纵符,确实带来了记忆上的负担,但是较printf来说,cout的类型自动检查带来的安全性是printf无法比拟的。
恋喵大鲤鱼
2018/08/03
5570
定制Qt的调试输出
「通过设置qSetMessagePattern函数去更改默认的消息。」   一般常用的格式字符串有:
Qt君
2020/04/15
8810
Linux中对【库函数】的调用进行跟踪的 3 种【插桩】技巧
在稍微具有一点规模的代码中(C 语言),调用第三方动态库中的函数来完成一些功能,是很常见的工作场景。
IOT物联网小镇
2022/02/09
1.8K0
Linux中对【库函数】的调用进行跟踪的 3 种【插桩】技巧
Unity-工具-查找丢失资源的Objects
public SerializedProperty GetIterator(); 返回SerializedProperty类 objectReferenceValue 参数:Object索引的相关obj
祝你万事顺利
2019/07/15
1.6K0
将hex printf输出存储到变量
I have to round off a float to decimal. After rounding off, I should convert this number to hexadecimal. I think I got the round off part okay with round()
iOS程序应用
2022/11/10
1.3K0
c语言printf()输出格式大全
大家好,又见面了,我是你们的朋友全栈君。 1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G) 浮点数不显无意义的零”0″ %i
全栈程序员站长
2022/09/15
4.1K0
方法的查找流程——快速查找
消息的接收者是objc_super类型,其内部携带了当前方法的调用者——实例对象自身,以及实例对象的父类。
拉维
2021/03/10
6360
方法的查找流程——快速查找
Utility之printf的格式化输出与转义字符
printf() - 向标准输出设备写入格式化语句。成功输出后,返回输出的字符数;否则返回负值
Taishan3721
2019/07/10
1.1K0
printf调试打印方法总结一
平台:stm32,可以推广到其他32位单片机中 开发软件:keil、IAR、SEGGER Embedded Studio for ARM 调试仿真器:stlink、jlink
用户4645519
2020/09/07
7970
使用下标给string类型赋值之后,cout输出变量为空的问题。
今天写创建文件夹的时候,怎么创建都不会,反复修改,确定错误是出在了string类型的变量上面。
花狗Fdog
2021/08/10
5K0
C++ cout 输出格式不常用情况
对于 cout,很多用习惯了 C 语言的 printf 的人们,多少对 cout 都是敬而远之。因其复杂繁多的格式控制操纵符,确实带来了记忆上的负担,但是较 printf 来说,cout 的类型自动检查带来的安全性是 printf 无法比拟的。
恋喵大鲤鱼
2022/11/29
4550
点击加载更多

相似问题

cout无输出,但printf输出

40

cout对printf -执行顺序

43

cout和printf中的意外输出

22

如何重载printf或cout

30

pow函数cout和printf的不同输出?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文