调试期间printf语句无法在控制台上打印

时间:2018-01-17 08:21:00

标签: c++ gdb

我有一个在执行期间创建多个线程的二进制文件。我正在尝试调试我已将printf语句作为代码中的里程碑插入的流程。但奇怪的是他们没有在控制台和GDB上打印 - 我不确定我做错了什么以及如何纠正错误:

./mycore.exe

当我开始流程时,我没有看到我的printf字符串打印在控制台上 - 但是看看GDB跟踪:

gdb  ./mycore.exe
break filename:linenum
run
[New Thread 11533.0x282c]
[New Thread 11533.0x283c]
[New Thread 11533.0x21d4]
[New Thread 11533.0x24f8]
[New Thread 11533.0x580]
[New Thread 11533.0x10e0]

[Switching to Thread 11533.0x283c]

Breakpoint 1, fuction ()
    at file.c:623
warning: Source file is more recent than executable.
623     {
(gdb) s
629         .........
(gdb) n
631         printf("reached here\n");
(gdb) n
640             ....................
(gdb) n
641             ....................
(gdb) quit
A debugging session is active.

        Inferior 1 [process 11592] will be killed.

正如您所看到的那样,执行GDB步骤流程导致了我引入的代码 - 打印语句。

如何解决问题 - 在控制台上打印printf?

=================== UPDATE =========================== ==

我重新编译了代码并再次运行并遇到同样的问题 - 仍然没有打印出printf字符串:

[Switching to Thread 5868.0x2c0c]

    Breakpoint 1, fuction ()
        at file.c:623
    623     {
    (gdb) s
    629         .........
    (gdb) n
    631         printf("reached here\n");
    (gdb) n
    640             ....................
    (gdb) n
    641             ....................
    (gdb) quit

1 个答案:

答案 0 :(得分:0)

两件事。

  1. 由于消息“警告:源文件比可执行文件更新。”你确定要重新编译吗?

  2. 过去我有同样的行为。程序中存在内存泄漏,使用调试器将泄漏移到代码中的其他位置,没有输出到控制台,因此我无法使用调试器来查找问题。使用调试器检查可能导致泄漏的所有变量,如指针。