Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;代码,在行内的指定函数上_C++_Gdb - Fatal编程技术网

C++ 如何在C++;代码,在行内的指定函数上

C++ 如何在C++;代码,在行内的指定函数上,c++,gdb,C++,Gdb,在以下代码中: 1 #include <iostream> 2 3 using namespace std; 4 5 int funcA(){ 6 cout << "A" << endl; 7 return 1; 8 } 9 10 int funcB(){ 11 cout << "B" << endl; 12 return 1; 13 } 14 15 int funcC(){ 16 cou

在以下代码中:

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 int funcA(){
 6    cout << "A" << endl;
 7    return 1;
 8 }
 9
10 int funcB(){
11    cout << "B" << endl;
12    return 1;
13 }
14
15 int funcC(){
16    cout << "C" << endl;
17    return 1;
18 }
19
20 int funcAll( int a, int b, int c ){
21    return 1;
22 }
23
24 int main(){
25    cout << funcAll( funcA(), funcB(), funcC() ) << endl;
26    return 0;
27 }
28
1#包括
2.
3使用名称空间标准;
4.
5 int funcA(){

6 cout没有任何直接的方法可以做到这一点;通常的方法是在感兴趣的函数中设置断点。

没有任何直接的方法可以做到这一点;通常的方法是在感兴趣的函数中设置断点。

您可以使用
until
命令运行,直到到达特定行。它不会设置断点int,它只在那里停止一次。请参见。(具体地说,请参见
直到*location*
上的文档)

您可以使用
直到
命令运行,直到到达特定行。它不设置断点,只在那里停止一次。请参见。(具体地说,请参见
直到*location*
上的文档)在C和C++中,函数的参数的顺序是未指定的。编译器可以在一定的约束条件下自由地重新排序/交错,但不能依赖于<代码>函数()/>代码>在代码>函数()/<代码>之前调用。< /P> 如果要确保参数将按特定顺序进行计算,请将它们分解为以下单独的语句:

int a = funcA();
int b = funcB();
int c = funcC();
cout << funcAll(a, b, c,) << endl;
或者,如果只需要执行一次,请使用
tbreak
而不是
break
设置一个临时断点,该断点将在首次命中后自动清除


您还可以使用
nexti
stepi
指令一次执行一条汇编指令。通过使用
discomble
命令查看反汇编,您可以升级到相应的调用站点(例如x86或x86-64上的
call
指令,或PowerPC上的
bl
)使用<代码> NEXTI/COD>,然后代码> STIPI 进入它。<代码> STIPI 和 NEXTI/<代码>工作如<代码>步骤< /代码>和下< /C> >,除了它们在汇编指令上而不是代码行上操作。

< P> C++中函数的参数的顺序是未指定的。编译器可以自由地进行R。在某些约束条件下,按其认为合适的方式对它们进行排序/交错。因此,您不能依赖于在调用
funcA()
之前调用
funcC()

如果要确保参数将按特定顺序进行计算,请将它们分解为以下单独的语句:

int a = funcA();
int b = funcB();
int c = funcC();
cout << funcAll(a, b, c,) << endl;
或者,如果只需要执行一次,请使用
tbreak
而不是
break
设置一个临时断点,该断点将在首次命中后自动清除


您还可以使用
nexti
stepi
指令一次执行一条汇编指令。通过使用
discomble
命令查看反汇编,您可以升级到相应的调用站点(例如x86或x86-64上的
call
指令,或PowerPC上的
bl
)使用
nexti
,然后
stepi
进入它。
stepi
nexti
的工作方式与
step
next
类似,只是它们根据汇编指令而不是代码行进行操作。

step
finish
step

你进入C,然后走出去进入B

step
finish
step

在某些情况下,当funcC不是一个2行函数时,会出现这种情况…需要加载的内容很多,如果在TUI.Yep中,有时一些打印需要刷新。调试很困难;编程更困难。在某些情况下,当funcC不是一个2行函数时,会出现这种情况…需要加载的内容很多,如果在TUI.Yep中,有时一些打印需要刷新。调试是hard;编程更难。你确定编译器依赖的顺序吗?我认为必须制定顺序,因为参数列表是无限的,就像使用printf时一样。是的。C++03§5.2.2/8说:“未指定参数的求值顺序。参数表达式求值的所有副作用在输入函数之前生效。未指定后缀表达式和参数表达式列表的求值顺序。”。“这样的编码会耗费大量内存,因为b和c将一直存在到块的末尾。谢谢你的回答。相反,如果两者之间存在任何不寻常的内存使用差异,我会非常惊讶。除非你在编译时禁用了优化(在这种情况下,你为什么关心内存使用?),编译器几乎肯定会生成几乎相同的代码——它仍然需要以某种顺序调用
funcA
funcB
funcC
,并将结果保存在某个位置(寄存器或堆栈上)在调用
funcAll
之前。您确定编译器依赖的顺序吗?我认为必须进行排序,因为参数列表是无限的,就像使用printf时一样。是的。C++03§5.2.2/8说:“未指定参数的求值顺序。参数表达式求值的所有副作用在输入函数之前生效。未指定后缀表达式和参数表达式列表的求值顺序。”。“这样的编码会耗费大量内存,因为b和c将一直存在到块的末尾。谢谢你的回答。相反,如果两者之间存在任何不寻常的内存使用差异,我会非常惊讶。除非你在编译时禁用了优化(在这种情况下,你为什么关心内存使用?),编译器几乎肯定会生成几乎相同的代码——它仍然需要以某种顺序调用
funcA
funcB
funcC
,并在调用
funcAll
之前将结果保存在某个地方(寄存器或堆栈上)。