0

gdb を使用して実行中のプロセスをアタッチしていますが、常に で停止し__kernel_vsyscallます。私のシステムコール msgrcv() で停止したようです。私は常にそれを「継続」する必要があり、いつカーネルから飛び出してアプリケーションに戻るかわかりません。どうしたら続けられるでしょうか?以下は私の手順です。

  1. どうやってこの状況になったの?
  2. それを継続させる方法は?

ありがとう!

gdb
(gdb) attach PID
...
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
0xffffe410 in __kernel_vsyscall ()

(gdb)bt

#0  0xffffe410 in __kernel_vsyscall ()
#1  0x009ed573 in msgrcv () from /lib/libc.so.6
#2  0xf7f3a487 in _UX_wgetmsg (mode=0, msgp=0xffbb4178, pmaxtime=0xffbb4164, 
    pdata=0xf7f7a860, ux_type=0) at ../../../ux/com_ux/libux/com/UXipc.c:2550
#3  0xf7f3ad05 in UX_wgetmsg_v2 (mode=0, msgp=0xffbb4178, maxtime=10000, 
    ux_type=0) at ../../../ux/com_ux/libux/com/UXipc.c:2237
#4  0x0804bb9b in main (argc=1, argv=0xffbb5394)
    at /path/to/my_application:243
4

1 に答える 1

1

どうやってこの状況になったの?

この状況は、システム コールでブロックされているプロセスにアタッチする場合 (メッセージを待っているか、読み取りが完了するまで)は完全に正常です。

それを継続させる方法は?

入力しますcontinue(その時点で、アプリケーションは再びブロックされ、メッセージを待ちます)。アプリケーションの一部をデバッグする場合は、続行する前にブレークポイントを設定してください。

于 2012-07-09T22:54:18.420 に答える