在Java/C#中,您可以轻松地逐步执行代码以跟踪可能出错的内容,而IDE使此过程非常用户友好.
你能以类似的方式追踪python代码吗?
C++标准中的$ 3.6.1/1节,
程序应包含一个名为main的全局函数,它是程序的指定开始.
现在考虑这段代码,
int square(int i) { return i*i; }
int user_main()
{
for ( int i = 0 ; i < 10 ; ++i )
std::cout << square(i) << endl;
return 0;
}
int main_ret= user_main();
int main()
{
return main_ret;
}
Run Code Online (Sandbox Code Playgroud)
此示例代码执行我打算执行的操作,即在进入main()
应该是程序"开始" 的函数之前打印从0到9的整数平方.
我还用-pedantic
选项GCC 4.5.0 编译它.它没有错误,甚至没有警告!
所以我的问题是,
这段代码真的符合标准吗?
如果它符合标准,那么它是否会使标准所说的无效?main()
不是这个计划的开始!user_main()
在执行之前执行main()
.
我知道要初始化全局变量main_ret
,use_main()
首先执行,但这是完全不同的事情; 关键是,它确实使标准中的引用语句$ 3.6.1/1无效,因为main() …
我只是在gdb中调试一个程序,不知怎的,我发现了一个我以前从未见过或甚至没有听说过的新功能,除了给出命令之外,我还可以看到并浏览代码:
这是什么?我做了什么,或者更具体地说,我怎样才能再次获得这种分屏模式?这个模式有名称,还是我可以阅读的有关如何使用它的地方?
$ gdb test
(gdb) start
Breakpoint 1 at 0x100000ec8
Starting program: /private/tmp/test
Reading symbols for shared libraries +. done
Breakpoint 1, 0x0000000100000ec8 in main ()
(gdb) layout asm
Undefined command: "layout". Try "help".
$ gdbtui
-bash: gdbtui: command not found
Run Code Online (Sandbox Code Playgroud)
是layout
与gdbtui
不是供Mac OS X
?有哪些替代方案?
假设在接收和处理信号时,在main方法内正在运行一个进程。信号处理程序完成后,该过程是否返回到接收信号的main中的行,还是返回到信号调用?
PS:我知道自己可以快速进行测试,但是当我无法使用PC时,这种想法就发生了。
谢谢。
使用gdb debbuger,我可以单步执行什么命令并显示将要执行的下一条指令?我对windbg很熟悉,该操作非常简单。
因此,例如,我具有以下功能,当我通过si进入代码时,我想显示下一条将要执行的指令,而不必通过反汇编进行完全反汇编。我该怎么做?
Dump of assembler code for function isEven:
0x0000000100000f20 <+0>: push %rbp
0x0000000100000f21 <+1>: mov %rsp,%rbp
0x0000000100000f24 <+4>: mov $0x2,%eax
0x0000000100000f29 <+9>: mov %edi,-0x4(%rbp)
=> 0x0000000100000f2c <+12>: mov -0x4(%rbp),%edi
0x0000000100000f2f <+15>: mov %eax,-0xc(%rbp)
0x0000000100000f32 <+18>: mov %edi,%eax
0x0000000100000f34 <+20>: cltd
0x0000000100000f35 <+21>: mov -0xc(%rbp),%edi
0x0000000100000f38 <+24>: idiv %edi
0x0000000100000f3a <+26>: cmp $0x0,%edx
0x0000000100000f3d <+29>: jne 0x100000f4f <isEven+47>
0x0000000100000f43 <+35>: movl $0x1,-0x8(%rbp)
0x0000000100000f4a <+42>: jmpq 0x100000f56 <isEven+54>
0x0000000100000f4f <+47>: movl $0x0,-0x8(%rbp)
0x0000000100000f56 <+54>: mov -0x8(%rbp),%eax …
Run Code Online (Sandbox Code Playgroud)