由于RED Hat Linux上的分段错误,我们正面临C ++应用程序崩溃问题。我们在C ++中使用嵌入式python。
请在下面找到我的限制
请在下面找到我们投入的努力。
我感谢任何帮助,指导我们进一步解决问题。
以下是版本详情
Red Hat linux服务器5.6(Tikanga) Python 2.6.2 GCC 4.1
以下是我从他们共享的核心转储文件(在我的机器上)获得的堆栈跟踪。仅供参考,我们无权访问生产机器以在核心转储文件上运行gdb。
0 0x00000033c6678630 in ?? ()
1 0x00002b59d0e9501e in PyString_FromFormatV (format=0x2b59d0f2ab00 "can't multiply sequence by non-int of type '%.200s'", vargs=0x46421f20) at Objects/stringobject.c:291
2 0x00002b59d0ef1620 in PyErr_Format (exception=0x2b59d1170bc0, format=<value optimized out>) at Python/errors.c:548
3 0x00002b59d0e4bf1c in PyNumber_Multiply (v=0x2aaaac080600, w=0x2b59d116a550) at Objects/abstract.c:1192
4 0x00002b59d0ede326 in PyEval_EvalFrameEx (f=0x732b670, throwflag=<value optimized out>) at Python/ceval.c:1119
5 0x00002b59d0ee2493 in call_function (f=0x7269330, throwflag=<value optimized out>) at Python/ceval.c:3794
6 PyEval_EvalFrameEx (f=0x7269330, throwflag=<value optimized out>) at Python/ceval.c:2389
7 0x00002b59d0ee2493 in call_function (f=0x70983f0, throwflag=<value optimized out>) at Python/ceval.c:3794
8 PyEval_EvalFrameEx (f=0x70983f0, throwflag=<value optimized out>) at Python/ceval.c:2389
9 0x00002b59d0ee2493 in call_function (f=0x6f1b500, throwflag=<value optimized out>) at Python/ceval.c:3794
10 PyEval_EvalFrameEx (f=0x6f1b500, throwflag=<value optimized out>) at Python/ceval.c:2389
11 0x00002b59d0ee2493 in call_function (f=0x2aaab09d52e0, throwflag=<value optimized out>) at Python/ceval.c:3794
12 PyEval_EvalFrameEx (f=0x2aaab09d52e0, throwflag=<value optimized out>) at Python/ceval.c:2389
13 0x00002b59d0ee2d9f in ?? () at Python/ceval.c:2968 from /usr/local/lib/libpython2.6.so.1.0
14 0x0000000000000007 in ?? ()
15 0x00002b59d0e83042 in lookdict_string (mp=<value optimized out>, key=0x46424dc0, hash=40722104) at Objects/dictobject.c:412
16 0x00002aaab09d5458 in ?? ()
17 0x00002aaab09d5458 in ?? ()
18 0x00002aaab02a91f0 in ?? ()
19 0x00002aaab0b2c3a0 in ?? ()
20 0x0000000000000004 in ?? ()
21 0x00000000026d5eb8 in ?? ()
22 0x00002aaab0b2c3a0 in ?? ()
23 0x00002aaab071e080 in ?? ()
24 0x0000000046422bf0 in ?? ()
25 0x0000000046424dc0 in ?? ()
26 0x00000000026d5eb8 in ?? ()
27 0x00002aaab0987710 in ?? ()
28 0x00002b59d0ee2de2 in PyEval_EvalFrame (f=0x0) at Python/ceval.c:538
29 0x0000000000000000 in ?? ()
答案 0 :(得分:3)
你几乎可以肯定在你的C ++代码中使用指针做错了,这可能非常难以调试。
std::vector
(C ++ 03)或std::array
(C ++ 11)替换数组,这样您就可以使用begin()
和end()
进行迭代,并且可以使用{{进行索引1}}。at()
(C ++ 11)或std::unique_ptr
替换它们(发布版本中不应有任何开销)。将其余部分替换为boost::scoped_ptr
或shared_ptr
。任何无法替换的都可能是有问题逻辑的根源。 由于您遇到的问题,现代C ++几乎可以完全删除所有原始指针使用。试试吧。
答案 1 :(得分:1)
首先,使用调试符号编译二进制文件和libpython
并将其推出。堆栈跟踪将更容易遵循。
g++
的相关论点是-g
。
答案 2 :(得分:1)
建议: