mdb 调试“::panicinfo':未知的 dcmd 名称”
mdb debugging "::panicinfo': unknown dcmd name"
我正在尝试使用 mdb 调试器查找分段错误的原因。
当我尝试
::恐慌信息,
::ps,
它给出以下错误
mdb:无效命令“::panicinfo”:未知的 dcmd 名称
mdb:无效命令“::ps”:未知的 dcmd 名称
但它们是有效的命令,不是吗?
我需要为此加载一些库吗?
::ps
和 ::panicinfo
是有效的 dcmd,但仅适用于内核模块化调试器 (mdb -k
)。
它们仅在检查内核时才有意义,更具体地说是 post 后者的崩溃转储。进程核心转储不包含进程 table 并且恐慌情况只会发生在内核崩溃时,而不是进程崩溃时。
您可以简单地 运行 pstack core
获取崩溃进程的堆栈回溯。
您可能想尝试的另一件事是说出
::status
当您查看核心文件时。然后你可以遍历线程列表,看看发生了什么——通常很容易看出哪个线程解决了错误:
$ mdb core.isapython2.6.7778
Loading modules: [ libc.so.1 libpython2.6.so.1.0 libnvpair.so.1
libsysevent.so.1 libcmdutils.so.1 libavl.so.1 libuutil.so.1
libumem.so.1 ld.so.1 ]
> ::status
debugging core file of isapython2.6 (32-bit) from limoncello
file: /usr/bin/i86/isapython2.6
initial argv: python
threading model: native threads
status: process terminated by SIGSEGV (Segmentation Fault), addr=b2b118f4
> ::walk thread |::findstack -v
stack pointer for thread 1: f13165ac
[ f13165ac libc_hwcap1.so.1`strlen+0x30() ]
f13165b8 libffi.so.5.0.10`ffi_call_SYSV+0x17(7213a40, f13165e0, 4, 1, f13166a0, 71a45a8)
f13165f8 libffi.so.5.0.10`ffi_call+0x74(f1316620, 71a45a8, f13166a0, f1316690)
f1316658 _ctypes.so`_call_function_pointer+0xe1(1109, 71a45a8, f1316690, f1316680, 8b6bf54, f13166a0)
f1316718 _ctypes.so`_CallProc+0x699(71a45a8, 8afcf2c, 1109, 8c54f6c, 8ba5f54, 0)
f1316778 _ctypes.so`CFuncPtr_call+0xe4(8b92f9c, 8afcf2c, 0, 7c798de)
f13167b8 libpython2.6.so.1.0`PyObject_Call+0x4b(8b92f9c, 8afcf2c, 0, 7d4f10e)
f1316858 libpython2.6.so.1.0`call_function+0x349(f13168dc, 1, f4ade76f, 7d47e31)
f1316908 libpython2.6.so.1.0`PyEval_EvalFrameEx+0x872(8d4d244, 0, 8b823e4, 0)
f1316948 libpython2.6.so.1.0`fast_function+0x118(8c4db54, f1316a7c, 1, 1, 0, 7db0000)
f13169f8 libpython2.6.so.1.0`call_function+0x8e(f1316a7c, 1, f1316a48, 7d47e31)
f1316aa8 libpython2.6.so.1.0`PyEval_EvalFrameEx+0x872(8d4c5b4, 0, 8a8224c, 8a8224c)
f1316b18 libpython2.6.so.1.0`PyEval_EvalCodeEx+0x15f(8ad7218, 8a8224c, 8a8224c, 0, 0, 0)
f1316b58 libpython2.6.so.1.0`PyEval_EvalCode+0x32(8ad7218, 8a8224c, 8a8224c, 8a91e00)
f1316b78 libpython2.6.so.1.0`run_mod+0x3a(8b47bd8, 7c5f9ac, 8a8224c, 8a8224c, f1316cdc)
f1316bf8 libpython2.6.so.1.0`PyRun_InteractiveLoopFlags+0x1a1(7ff5e90, 7c5f9ac, f1316cdc, 7d7866e)
f1316c28 libpython2.6.so.1.0`PyRun_AnyFileExFlags+0x6b(7ff5e90, 7c5f9ac, 0, f1316cdc)
f1316d88 libpython2.6.so.1.0`Py_Main+0x393(1, f1316df0, 7fb0895, 8050c2c)
f1316db8 main+0x63(1, f1316df0, f1316df8)
f1316de4 _start+0x77(1, f1316f38, 0, f1316f3f, f1316f5a, f1316f7e)
> ::regs
%cs = 0x0043 %eax = 0xb2b118f4
%ds = 0x004b %ebx = 0x071cb000
%ss = 0x004b %ecx = 0x08d95cc4
%es = 0x004b %edx = 0x00000000
%fs = 0x0000 %esi = 0x00000000
%gs = 0x01c3 %edi = 0x00000000
%eip = 0x07eb9520 libc_hwcap1.so.1`strlen+0x30
%ebp = 0xf13165ac
%kesp = 0x00000000
%eflags = 0x00210246
id=1 vip=0 vif=0 ac=0 vm=0 rf=1 nt=0 iopl=0x0
status=<of,df,IF,tf,sf,ZF,af,PF,cf>
%esp = 0xf1316360
%trapno = 0xe
%err = 0x4
(他说,小心翼翼地选择了他身边的单线程内核)。
现在,关于 why
您的进程崩溃了 - 一旦您获得线程堆栈,您需要调查您的程序源。
我正在尝试使用 mdb 调试器查找分段错误的原因。 当我尝试
::恐慌信息,
::ps,
它给出以下错误
mdb:无效命令“::panicinfo”:未知的 dcmd 名称
mdb:无效命令“::ps”:未知的 dcmd 名称
但它们是有效的命令,不是吗?
我需要为此加载一些库吗?
::ps
和 ::panicinfo
是有效的 dcmd,但仅适用于内核模块化调试器 (mdb -k
)。
它们仅在检查内核时才有意义,更具体地说是 post 后者的崩溃转储。进程核心转储不包含进程 table 并且恐慌情况只会发生在内核崩溃时,而不是进程崩溃时。
您可以简单地 运行 pstack core
获取崩溃进程的堆栈回溯。
您可能想尝试的另一件事是说出
::status
当您查看核心文件时。然后你可以遍历线程列表,看看发生了什么——通常很容易看出哪个线程解决了错误:
$ mdb core.isapython2.6.7778
Loading modules: [ libc.so.1 libpython2.6.so.1.0 libnvpair.so.1
libsysevent.so.1 libcmdutils.so.1 libavl.so.1 libuutil.so.1
libumem.so.1 ld.so.1 ]
> ::status
debugging core file of isapython2.6 (32-bit) from limoncello
file: /usr/bin/i86/isapython2.6
initial argv: python
threading model: native threads
status: process terminated by SIGSEGV (Segmentation Fault), addr=b2b118f4
> ::walk thread |::findstack -v
stack pointer for thread 1: f13165ac
[ f13165ac libc_hwcap1.so.1`strlen+0x30() ]
f13165b8 libffi.so.5.0.10`ffi_call_SYSV+0x17(7213a40, f13165e0, 4, 1, f13166a0, 71a45a8)
f13165f8 libffi.so.5.0.10`ffi_call+0x74(f1316620, 71a45a8, f13166a0, f1316690)
f1316658 _ctypes.so`_call_function_pointer+0xe1(1109, 71a45a8, f1316690, f1316680, 8b6bf54, f13166a0)
f1316718 _ctypes.so`_CallProc+0x699(71a45a8, 8afcf2c, 1109, 8c54f6c, 8ba5f54, 0)
f1316778 _ctypes.so`CFuncPtr_call+0xe4(8b92f9c, 8afcf2c, 0, 7c798de)
f13167b8 libpython2.6.so.1.0`PyObject_Call+0x4b(8b92f9c, 8afcf2c, 0, 7d4f10e)
f1316858 libpython2.6.so.1.0`call_function+0x349(f13168dc, 1, f4ade76f, 7d47e31)
f1316908 libpython2.6.so.1.0`PyEval_EvalFrameEx+0x872(8d4d244, 0, 8b823e4, 0)
f1316948 libpython2.6.so.1.0`fast_function+0x118(8c4db54, f1316a7c, 1, 1, 0, 7db0000)
f13169f8 libpython2.6.so.1.0`call_function+0x8e(f1316a7c, 1, f1316a48, 7d47e31)
f1316aa8 libpython2.6.so.1.0`PyEval_EvalFrameEx+0x872(8d4c5b4, 0, 8a8224c, 8a8224c)
f1316b18 libpython2.6.so.1.0`PyEval_EvalCodeEx+0x15f(8ad7218, 8a8224c, 8a8224c, 0, 0, 0)
f1316b58 libpython2.6.so.1.0`PyEval_EvalCode+0x32(8ad7218, 8a8224c, 8a8224c, 8a91e00)
f1316b78 libpython2.6.so.1.0`run_mod+0x3a(8b47bd8, 7c5f9ac, 8a8224c, 8a8224c, f1316cdc)
f1316bf8 libpython2.6.so.1.0`PyRun_InteractiveLoopFlags+0x1a1(7ff5e90, 7c5f9ac, f1316cdc, 7d7866e)
f1316c28 libpython2.6.so.1.0`PyRun_AnyFileExFlags+0x6b(7ff5e90, 7c5f9ac, 0, f1316cdc)
f1316d88 libpython2.6.so.1.0`Py_Main+0x393(1, f1316df0, 7fb0895, 8050c2c)
f1316db8 main+0x63(1, f1316df0, f1316df8)
f1316de4 _start+0x77(1, f1316f38, 0, f1316f3f, f1316f5a, f1316f7e)
> ::regs
%cs = 0x0043 %eax = 0xb2b118f4
%ds = 0x004b %ebx = 0x071cb000
%ss = 0x004b %ecx = 0x08d95cc4
%es = 0x004b %edx = 0x00000000
%fs = 0x0000 %esi = 0x00000000
%gs = 0x01c3 %edi = 0x00000000
%eip = 0x07eb9520 libc_hwcap1.so.1`strlen+0x30
%ebp = 0xf13165ac
%kesp = 0x00000000
%eflags = 0x00210246
id=1 vip=0 vif=0 ac=0 vm=0 rf=1 nt=0 iopl=0x0
status=<of,df,IF,tf,sf,ZF,af,PF,cf>
%esp = 0xf1316360
%trapno = 0xe
%err = 0x4
(他说,小心翼翼地选择了他身边的单线程内核)。
现在,关于 why
您的进程崩溃了 - 一旦您获得线程堆栈,您需要调查您的程序源。