我有一个在执行期间创建多个线程的二进制文件。我正在尝试调试我已将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
答案 0 :(得分:0)
两件事。
由于消息“警告:源文件比可执行文件更新。”你确定要重新编译吗?
过去我有同样的行为。程序中存在内存泄漏,使用调试器将泄漏移到代码中的其他位置,没有输出到控制台,因此我无法使用调试器来查找问题。使用调试器检查可能导致泄漏的所有变量,如指针。