我正在调试一个应用程序A,我发现当进程A(应用程序A)调用函数foo()时,这个函数位于另一个进程B中。我的意思是如果我在调用foo()之前杀死进程B,那么foo()输出没有显示。当从应用程序 A 调用 foo() 时,我可以修改 foo() 代码并查看新的修改。两个应用程序都定义了 foo()。我不知道这是如何实现的。调用在编译时以正常方式执行:
....
foo(b);
....
我正在调试一个应用程序A,我发现当进程A(应用程序A)调用函数foo()时,这个函数位于另一个进程B中。我的意思是如果我在调用foo()之前杀死进程B,那么foo()输出没有显示。当从应用程序 A 调用 foo() 时,我可以修改 foo() 代码并查看新的修改。两个应用程序都定义了 foo()。我不知道这是如何实现的。调用在编译时以正常方式执行:
....
foo(b);
....
gdb 或多或少可以为你做这件事。您只需要几个 gdb 会话,每个进程一个(如果这些会话位于嵌入式目标上,gdb-server 会有所帮助)。然后在方便的位置中断进程之一(使用断点、脚本或其他)并使用“call foo()”语句。
例如:
(gdb) call fprintf(stderr, "test %d\n", 5)
test 5
$3 = 7
(gdb)
最后我意识到我正在从共享库调用 foo() 。我猜想 foo() 是在进程 B 中运行的,因为正确执行 foo() 需要进程 B。我的道歉。