是否有可能让gdb将某些东西记录到终端而不是破坏它?例如,我想在某些方法上设置一个“断点”,并在每次调用该方法时使gdb自我打印以及参数。基本上我想在没有实际重新编译的情况下将打印语句插入任意位置。gdb:记录的东西,而不是打破?
感谢您的任何建议
这是我后至今,这些有益的意见有:
define logFoo
b fooMethod
commands
po self
end
end
GDB似乎并不喜欢嵌套结束语句虽然。有什么想法吗?
是否有可能让gdb将某些东西记录到终端而不是破坏它?例如,我想在某些方法上设置一个“断点”,并在每次调用该方法时使gdb自我打印以及参数。基本上我想在没有实际重新编译的情况下将打印语句插入任意位置。gdb:记录的东西,而不是打破?
感谢您的任何建议
这是我后至今,这些有益的意见有:
define logFoo
b fooMethod
commands
po self
end
end
GDB似乎并不喜欢嵌套结束语句虽然。有什么想法吗?
您可以使用Breakpoint Command Lists。有一个例子是如何做到的。
例如,这里是你如何可以使用 断点命令在进入打印x的值 为foo每当x是 阳性。
break foo if x>0 commands silent printf "x is %d\n",x cont end
真棒。有一件事。我想打破的符号(方法)是一件很常见的事情,所以它可能需要设置许多断点。如何将命令附加到每个命令而无需手动执行100次? – 2011-06-01 19:49:57
不,这是不可能的。您只能勾选代码和机器码的符号。如果你想记录输出,你需要一个记录功能。
如果您正在跟踪特定错误,请尝试使用条件断点和监视变量。
编辑:
即使没有直接洛也可能是使用GDB command files
感谢您的回复。我很难相信这是不可能的。我可以很容易地做一些事情,比如break hitTest:withEvent:,然后当它破解为自我时,p指向我想要的信息。这怎么能不自动让gdb直接打印这些,而不让我在每次断裂时都实际告诉它呢? – 2011-06-01 19:22:31
这听起来很疯狂,可能有机会使用某种宏执行你想要的操作,但它仍然不能直接记录。结帐:http://tromey.com/blog/?p=548 – grundprinzip 2011-06-01 19:29:47
为了将来的参考,双重目的是一个已知的错误。解决方法是将内部块放在单独的文本文件中并使用源来加载它。 – 2011-06-01 23:49:39