gpt4 book ai didi

c - GDB调试中的问题

转载 作者:IT王子 更新时间:2023-10-29 01:19:12 24 4
gpt4 key购买 nike

我用GDB调试一个C程序,但是我发现GDB执行了一些代码两次。

例如,

 ....
stream_t *s = stream_CommonNew( VLC_OBJECT(p_access) );
stream_sys_t *p_sys;
if( !s )
return NULL;
s->p_input = p_access->p_input;
s->psz_path = strdup( p_access->psz_path );
....

GDB 调试,

292     stream_t *s = stream_CommonNew( VLC_OBJECT(p_access) );
Missing separate debuginfos, use: debuginfo-install dbus-libs-1.2.16-9.fc12.i686 libcap-ng-0.6.2-3.fc12.i686
(gdb) next
295 if( !s )
(gdb)
292 stream_t *s = stream_CommonNew( VLC_OBJECT(p_access) );
(gdb)
295 if( !s )
(gdb)
298 s->p_input = p_access->p_input;
(gdb)
299 s->psz_path = strdup( p_access->psz_path );
(gdb)
298 s->p_input = p_access->p_input;
(gdb)
299 s->psz_path = strdup( p_access->psz_path );

我很困惑。你能解释一下为什么吗?

谢谢

最佳答案

它实际上并不是将相同的代码执行两次。编译器优化可能会导致机器指令重新排序,以便为第二个源代码行生成的一些指令被放置在第一个源代码行的最后一条指令之前。当与指令对应的源代码行更改时,Gdb 的“下一个”命令停止,即使它实际上可能只是在执行尚未完成的源代码行的其余部分。

关于c - GDB调试中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5829665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com