使用mdb进行应用程序堆栈跟踪解释

时间:2012-03-06 12:09:40

标签: c debugging solaris

有人可以帮我解决这个堆栈跟踪:

        Loading modules: [ libumem.so.1 libc.so.1 libuutil.so.1 ld.so.1 ]
        > $c
        libc.so.1`strlen+0xc(80b37ba, fe679d2c, fe679d00, 0)
        libc.so.1`snprintf+0x74(fe67d970, 1388, 80b37b8, efef9f68, 80b379d, fe679e30)
        > 80b37ba::whatis
        80b37ba is unknown
        > fe679d2c::whatis
        fe679d2c is unknown
        > fe679d00::whatis
        fe679d00 is unknown

strlen函数获取一个参数,但在此堆栈跟踪中我看到3个地址?他们是什么意思?

问候

1 个答案:

答案 0 :(得分:1)

调试器无法解释大部分内容。

调试器可能不知道函数有多少参数。所以它打印更多。但是你可以忽略额外的参数。

有意义的部分显示snprintf被调用,然后调用strlen。这可能是由于格式字符串中的%sstrlen参数与snprintf的第三个参数相似(不相同,我不知道为什么)。
因此,某些代码可能会执行类似snprintf("%d %s\n", number, string)的内容 您可以在fe67d970找到实际的格式字符串,它可能会让您识别谁调用它(除非您在任何地方使用相同的格式字符串)。