1

我有一个我正在尝试跟踪的 OpenGL 库错误,并且该错误将一些看起来像 C 代码的内容打印到标准输出中。这是程序,一旦glutMainLoop()调用就会出现错误,但我怀疑不是那个函数有问题。我将如何跟踪写入标准输出的函数?

根据要求,输出:

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

我已经报告了这个错误,但我也会尝试为这个问题提供一个 GDB 回溯。

4

2 回答 2

6

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

$ 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"...
于 2013-02-18T17:37:42.067 回答
1

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

于 2013-02-18T16:31:32.670 回答