相关疑难解决方法(0)

检测到堆栈粉碎

我正在执行我的a.out文件.执行后程序运行一段时间然后退出并显示以下消息:

**** stack smashing detected ***: ./a.out terminated*
*======= Backtrace: =========*
*/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted*
Run Code Online (Sandbox Code Playgroud)

可能的原因是什么?如何纠正?

c stack exception

225
推荐指数
5
解决办法
37万
查看次数

<value optimized out>在gdb中意味着什么?

(gdb) n
134   a = b = c = 0xdeadbeef + ((uint32_t)length) + initval;
(gdb) n
(gdb) p a
$30 = <value optimized out>
(gdb) p b
$31 = <value optimized out>
(gdb) p c
$32 = 3735928563
Run Code Online (Sandbox Code Playgroud)

gdb如何优化我的价值?

gdb

58
推荐指数
4
解决办法
9万
查看次数

如何在Chrome源调试中调试Javascript时倒退?

Chrome源代码调试包含用于单步执行,步入和退出的按钮.没有时间倒退,看看以前的功能是什么.

javascript-debugger google-chrome-devtools

36
推荐指数
3
解决办法
1万
查看次数

如何在C++中查看<optimized out>变量的值?

我正在使用gdb来调试C++程序.

我有这个代码:

int x = floor(sqrt(3));
Run Code Online (Sandbox Code Playgroud)

我想查看x的值.但是,gdb声称x是"<optimized_out>".如何查看x的值?我应该更改编译器标志吗?

c++ gdb g++

35
推荐指数
2
解决办法
7万
查看次数

如何调试罕见的死锁?

我正在尝试调试很少有死锁的自定义线程池实现.所以我不能使用像gdb这样的调试器,因为我在遇到死锁之前点击了100次"启动"调试器.

目前,我在shell脚本的无限循环中运行线程池测试,但这意味着我看不到变量等等.我正在尝试std::cout数据,但这会减慢线程并减少死锁的风险,这意味着我可以在获取消息之前等待1小时的无限.然后我没有得到错误,我需要更多的消息,这意味着再等一个小时......

如何有效地调试程序,以便它一遍又一遍地重启直到它死锁?(或者我应该用所有代码打开另一个问题以获得一些帮助?)

先感谢您 !

奖金问题:如何检查一切顺利std::condition_variable?您无法确定哪个线程处于睡眠状态,或者条件是否出现竞争wait条件.

c++ multithreading deadlock threadpool c++11

16
推荐指数
2
解决办法
6095
查看次数

如何对程序进行双向或反向调试?

有没有人真正使用过可逆调试器?谷歌出现的唯一产品是UndoDB.它显然仅适用于Linux.

debugging gdb reverse-debugging

15
推荐指数
3
解决办法
3035
查看次数

gdb反向调试失败,"进程记录不支持地址指令0xf0d"

我开始尝试使用gdb 7进行反向调试,按照教程:

http://www.sourceware.org/gdb/wiki/ProcessRecord/Tutorial
Run Code Online (Sandbox Code Playgroud)

我想,太好了!

然后我开始调试一个真正的程序,最后给出一个错误.所以我用gdb运行它,并在我认为错误出现的地方之前放置一个断点.然后我键入"record"以开始记录操作以便将来进行反向调试.但经过一些步骤,我得到了

Process record doesn't support instruction 0xf0d at address 0x2aaaab4c4b4e.
Process record: failed to record execution log.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00002aaaab4c4b4e in memcpy () from /lib64/libc.so.6
(gdb) n
Single stepping until exit from function memcpy,
which has no line number information.
Process record doesn't support instruction 0xf0d at address 0x2aaaab4c4b4e.
Process record: failed to record execution log.

Program received signal SIGABRT, Aborted.
0x00002aaaab4c4b4e in memcpy () from /lib64/libc.so.6
Run Code Online (Sandbox Code Playgroud)

在我详细介绍之前,我想知道这个功能是否还有错误,或者我是否应该从头开始录制.

发生此"记录"错误的地方,只创建一个对象作为其他对象的副本.

gdb reverse-debugging

6
推荐指数
2
解决办法
2717
查看次数

运行reverse-step时,目标子级不支持此命令错误

我正在玩gdb反向调试.所以我有一个简单的C程序,main()和foo()在main()中调用.

在gdb里面,我做了以下几点

b main
record
run
Run Code Online (Sandbox Code Playgroud)

然后我介入foo():

s
Run Code Online (Sandbox Code Playgroud)

然后我试着回去

reverse-step
Run Code Online (Sandbox Code Playgroud)

那是我在标题中收到错误消息的时候.

我的gdb版本是:GNU gdb(GDB)7.5.91.20130417-cvs-ubuntu

我做错了什么?

debugging gdb

3
推荐指数
1
解决办法
2858
查看次数

如何在GDB中运行之前的指令?

在这里我想问这个问题。当我调试程序时,有时我希望能够再次运行之前的指令。就像在 Microsoft Visual Studio 中一样,我们可以将位置指示器(记住黄色箭头)拖动到您要查找的上一条指令。

例如:

我的程序当前位于第 72 行,假设第 70 行与第 72 行所在的函数相同。现在我想再次重新运行第 70 行。有什么办法可以做到这一点吗?

谢谢。

linux debugging gdb

2
推荐指数
1
解决办法
9200
查看次数