我有一个 gdb be crashed dump having crashed at dopr
这是做什么的?我没有定义这个函数,也没有在任何地方调用。是 libc 函数吗?
[Switching to thread 1 (Thread 5339)]#0 0x00000000005f0937 in _dopr ()
(gdb) bt
#0 0x00000000005f0937 in _dopr ()
#1 0x00000000000003ff in ?? ()
#2 0x000000000111c3b0 in ?? ()
#3 0x00007fced1fe1f80 in ?? ()
#4 0x0000000000000000 in ?? ()
如评论中所述,_dopr 不是您的问题。您看到的是堆栈损坏,而且在评论中,缓冲区溢出是最有可能的问题。
假设您正在使用 gcc 编译您的应用程序,添加选项:
-fstack-protector-all
到你的编译和链接选项。这会在堆栈周围增加几个额外的标记位,当您的缓冲区溢出发生时,在 gdb 中您会看到更有用的“检测到堆栈粉碎”消息,以及您的应用程序在实际销毁堆栈之前的堆栈跟踪.
我是一名优秀的程序员,十分优秀!