gdb:如何将共享库的日志文件重定向到 gdb 输出
gdb: How to redirect the log-file of shared lib to gdb output
我想调试一个由我的程序调用的共享库。共享库输出到单独的日志文件:shared-lib.log。我想将库的输出重定向到 gdb(我想将输出重定向到运行 GDB 的同一终端)。我尝试了以下方法:
(gdb) run myprogram shared-lib.log>1
(gdb) run myprogram shared-lib.log>/dev/stdout
(gdb) run myprogram /dev/stdout
但这不起作用,完整的路径名/var/log/shared-lib.log 也是如此。
共享库输出到单独的日志文件:shared-lib.log。
如果您有该库的源,则可以对其进行修改以不执行此操作。如果你不这样做,你应该让它的开发人员知道你不欣赏他们选择的日志记录(提供一种方法将库输出重定向到某个地方是可以的,但坚持这样做而不让你自己决定是不行的)。
我想将库的输出重定向到 gdb。
大概您希望将该输出重定向到运行 GDB 的同一终端,以便您可以在单步执行程序时看到库输出的外观。
您可以尝试将此操作作为第一步:
rm -f shared-lib.log && ln -s /dev/tty shared-lib.log
如果库只是open("shared-lib.log", O_WRONLY|O_CREAT, ...)
,那么这应该就足够了。但是,如果库首先执行unlink("shared-lib.log")
,则不起作用。
在这种情况下,并非一切都会丢失,但会变得更加困难。您可能希望找出库正在写入哪个文件描述符(在 Linux 上,ls -l /proc/<pid-of-inferior>/fd
应该告诉您)。您还希望安排一个开放的fd2
去/dev/tty
。最后,您需要调用dup2($fd, $fd2)
将库输出重定向到终端。您可能还需要在程序中fflush(NULL)
,否则库可能会完全缓冲其调试输出(因为它认为其输出将转到文件,并且 stdio 默认完全缓冲此类输出)。
相关文章:
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 如何找出GDB的SIGTRAP核心转储的根本原因
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 使用vscode调试时,GDB意外退出
- 是否可以配置提升日志刷新?
- 跟踪日志中的T.11803()是什么意思?
- 如何防止 CUDA-GDB 中的<优化输出>值
- fopen 在 gdb 中返回 NULL
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 结构字段名称与 GDB 中的 STL 数组冲突
- 加快在C++中读取/处理日志文件的速度
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- GDB 断点在 Mac 上是不准确的
- 如何将消息时间戳写入日志文件?
- 分析包含 NMEA 句子的日志文件C++
- 如何解释GDB中回溯的模板函数签名?
- C 如何在Ubuntu中解释GDB回溯日志
- gdb:如何将共享库的日志文件重定向到 gdb 输出