【问题标题】:gdb print file name line number when program is runninggdb 在程序运行时打印文件名行号
【发布时间】:2018-01-12 16:02:42
【问题描述】:

我需要使用 gdb 调试流程 - 我不知道调用堆栈因此无法设置断点,并且在运行数千行的项目代码中通过第一个入口点将非常乏味。

同样有一种方法,当我通过 gdb 启动程序执行时,我们启用一些命令(在一些初始断点之后) - 因此,当程序开始在其上进一步处理时打印文件名行号而无需用户交互 - 类似于代码流本身?

【问题讨论】:

  • 你可以在程序处于断点时更改一个变量,这是你的要求吗?
  • 嗯,我想在通过 GDB 执行时列出代码行 - 就像我们在设置断点并运行“步骤”时所做的那样。有没有办法让 GDB 在程序运行时自动打印代码?
  • 是的,但我从未使用过。 sourceware.org/gdb/onlinedocs/gdb/Break-Commands.html我想对你有帮助
  • 它会列出它正在执行的代码行 - 我不确定这些设置是否会启用打印代码行 - 例如 bash 'set -x' 命令 - 它会打印它正在执行的内容和脚本流程
  • 它会打印你告诉它打印的任何东西 - 如果你添加 bt 它会在每次遇到断点时打印回溯

标签: c++ gdb


【解决方案1】:

我想在通过 GDB 执行时列出代码行 - 就像我们做的那样 当设置断点并且我们运行'step'时。

你可以像这样在无限循环中运行step

(gdb) start 
Temporary breakpoint 2, main () at ttt123.cpp:23
23      vector<A> v1;
(gdb) while 1
 >step
 >end

【讨论】:

  • 谢谢 - 它有帮助,但我现在可以将控制台上打印的任何 GDB 存储到文件中吗 - GDB 消息正在快速打印并且屏幕滚动 - 如果有线程或其他一些,还有其他方法吗技术——这只是看看是否存在其他机制?
  • 是的,在无限循环之前执行set pagination offset logging on,默认情况下输出会保存到gdb.txt文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 2012-02-11
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多