gpt4 book ai didi

c++ - GDB - 如何打破 "something is written to cout"?

转载 作者:IT老高 更新时间:2023-10-28 22:59:58 24 4
gpt4 key购买 nike

我想设置一个断点,每次通过 cout 流将某些内容写入 stdout 时触发,但我无法找到可能的位置断点。

如何在 gdb 中执行此操作?

最佳答案

这是一种依赖于平台的方式。如果您在 x86_64 上并使用 gcc 构建写入 std::cout 会导致调用 fwrite。回溯看起来像这样:

#0  0x0000003c2fc622a0 in fwrite () from /lib64/libc.so.6
#1 0x0000003c43289655 in std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_int<long>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const () from /usr/lib64/libstdc++.so.6
#2 0x0000003c432898c7 in std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, long) const () from /usr/lib64/libstdc++.so.6
#3 0x0000003c43291e5c in std::basic_ostream<char, std::char_traits<char> >::operator<<(int) () from /usr/lib64/libstdc++.so.6

所以这是在写入 std::cout(std::cout 是 http://refspecs.linuxfoundation.org/LSB_1.1.0/gLSB/baselib--io-2-1-stdout--.html)时中断的一种可能方式:

b fwrite if $rcx==&_IO_2_1_stdout_

这是一种中断写入 std::cerr 的方法(std::cerr 是 http://refspecs.linuxfoundation.org/LSB_1.0.0/gLSB/baselib--io-2-1-stderr--.html ):

b fwrite if $rcx==&_IO_2_1_stderr_

关于c++ - GDB - 如何打破 "something is written to cout"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com