首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gdb -如何查看哪些函数使用了stdout?

gdb -如何查看哪些函数使用了stdout?
EN

Stack Overflow用户
提问于 2013-02-19 00:27:00
回答 2查看 722关注 0票数 1

我有一个试图追踪的OpenGL库错误,该错误将类似于C代码的内容打印到标准输出中。This is the program,而且glutMainLoop()一被调用就会出现错误,但我怀疑不是那个函数有问题。我该如何跟踪写到stdout的函数呢?

根据请求,输出:

代码语言:javascript
复制
arc_ccw_turn, p = 0
case b
arc_ccw_turn, p = 0
case d
arc_ccw_turn, p = 0
case a
arc_ccw_turn, p = 0
case c

我有reported the bug already,但我也会尝试提供一个GDB回溯来解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 01:37:42

如果您使用的是Linux,那么在write()上设置一个断点,所有到stdoutstderr的输出最终都会经过这个函数。以下是针对x86-64的,对于其他架构,您需要更改寄存器名称:

代码语言:javascript
复制
$ gdb /usr/bin/cat
Reading symbols from /usr/bin/cat...(no debugging symbols found)...done.
(gdb) set args /proc/cpuinfo
(gdb) b write
Breakpoint 1 at 0x401740
(gdb) condition 1 ($rdi == 1 || $rdi == 2)
(gdb) display $rdi
(gdb) display $rsi
(gdb) display $rdx
(gdb) r
Starting program: /usr/bin/cat /proc/cpuinfo
3: $rdx = 3368
2: $rsi = 6348800
1: $rdi = 1
(gdb) p (char*)$rsi
$4 = 0x60e000 "processor\t: 0\nvendor_id\t: GenuineIntel\ncpu family\t: 6\nmodel\t\t: 30\nmodel name\t: Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz\nstepping\t: 5\nmicrocode\t: 0x5\ncpu MHz\t\t: 1199.000\ncache size\t: 8192 KB\nphy"...
票数 6
EN

Stack Overflow用户

发布于 2013-02-19 00:31:33

std::streambuf::sputcstd::streambuf::sputn上设置断点。如有必要,在main中执行print std::cin::rdbuf(),并将this上的断点设置为等于从该表达式中返回的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14940826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档