Требуемая вами функция (как описано в rpg) недоступна из GDB
, и IMHO будет трудно использовать, если она будет реализована.
Аналогичная, но более простая в использовании функция fstep
предлагается для GDB
. Дано:
foo((string("Hello") + string(" World!)).c_str());
fstep
будет пропускать все вызовы в текущей строке, кроме последней (таким образом пропуская строковые конструкторы, operator+()
и c_str()
, и переходя только в foo
).
Это также не было реализовано, но, вероятно, будет через пару месяцев (это очень полезно для C++
отладки).
В то же время, вы можете приблизить функцию, установив временную точку останова:
(gdb) list
1 #include <string>
2 #include <iostream>
3 using namespace std;
4
5 void foo(const char *s)
6 {
7 cout << s << endl;
8 }
9
10 int main()
11 {
12 foo((string("Hello") + string(" World!")).c_str());
13 return 0;
14 }
(gdb) b main
Breakpoint 2 at 0x8048901: file t.cc, line 12.
(gdb) run
Breakpoint 1, main () at t.cc:12
12 foo((string("Hello") + string(" World!")).c_str());
(gdb) tb foo
Breakpoint 3 at 0x80488ca: file t.cc, line 7.
(gdb) c
foo (s=0x804a1f4 "Hello World!") at t.cc:7
7 cout << s << endl;
(gdb) q