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