0

我正在调试一个应用程序A,我发现当进程A(应用程序A)调用函数foo()时,这个函数位于另一个进程B中。我的意思是如果我在调用foo()之前杀死进程B,那么foo()输出没有显示。当从应用程序 A 调用 foo() 时,我可以修改 foo() 代码并查看新的修改。两个应用程序都定义了 foo()。我不知道这是如何实现的。调用在编译时以正常方式执行:

....
foo(b);
.... 
4

2 回答 2

0

gdb 或多或少可以为你做这件事。您只需要几个 gdb 会话,每个进程一个(如果这些会话位于嵌入式目标上,gdb-server 会有所帮助)。然后在方便的位置中断进程之一(使用断点、脚本或其他)并使用“call foo()”语句。

例如:

(gdb) call fprintf(stderr, "test %d\n", 5)
test 5
$3 = 7
(gdb)
于 2013-11-12T06:48:14.750 回答
0

最后我意识到我正在从共享库调用 foo() 。我猜想 foo() 是在进程 B 中运行的,因为正确执行 foo() 需要进程 B。我的道歉。

于 2013-11-13T10:41:26.047 回答