Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++_Debugging_Callstack - Fatal编程技术网

C++ 是否可以调试当前函数的调用方?

C++ 是否可以调试当前函数的调用方?,c++,debugging,callstack,C++,Debugging,Callstack,可能重复: 通常,在调试代码时,我需要确定是谁在调用我在其中放置调试语句的函数。我知道\uuuuu函数\uuuuu的计算结果是当前函数的名称,但是是否有类似的东西可以给出被调用方的名称?或者打印出调用堆栈 信息必须可用。如果我输入一个将segfault的断言或代码,我会得到一个堆栈跟踪,显示整个调用堆栈。堆栈跟踪打印代码从哪里获得该信息 如果您无法生成一个平台无关的解决方案,那么可以在使用gcc编译的x86_64 Ubuntu 12.04上运行。为其他平台提供解决方案也有好处。堆栈跟踪通过遍历

可能重复:

通常,在调试代码时,我需要确定是谁在调用我在其中放置调试语句的函数。我知道
\uuuuu函数\uuuuu
的计算结果是当前函数的名称,但是是否有类似的东西可以给出被调用方的名称?或者打印出调用堆栈

信息必须可用。如果我输入一个将segfault的断言或代码,我会得到一个堆栈跟踪,显示整个调用堆栈。堆栈跟踪打印代码从哪里获得该信息


如果您无法生成一个平台无关的解决方案,那么可以在使用
gcc
编译的x86_64 Ubuntu 12.04上运行。为其他平台提供解决方案也有好处。

堆栈跟踪通过遍历调用堆栈查找返回地址并遍历可执行文件以查找返回地址返回到哪个函数来获取该信息。那里没有可携带的东西。没有找到呼叫者的一般方法。最好是在调试器下运行,并设置一个断点以在调试代码触发时触发


< > >代码>函数> <代码>不是标准C++的一部分。在我看来,它是GNU的东西。

堆栈跟踪通过遍历调用堆栈寻找返回地址并遍历可执行文件以找到返回地址返回到哪个函数来获取该信息。那里没有可携带的东西。没有找到呼叫者的一般方法。最好是在调试器下运行,并设置一个断点以在调试代码触发时触发

< > >代码>函数> <代码>不是标准C++的一部分。在我看来,这是GNU的事情。

这取决于操作系统

在Linux和gcc上,使用
backtrace(3)
。对于Windows,请参阅。

这取决于操作系统


在Linux和gcc上,使用
backtrace(3)
。对于Windows,请参阅。

它不提供调用者的名称,但内部函数
\u ReturnAddress()
通常返回指向调用者的指针。

它不提供调用者的名称,而是提供内部函数
\u ReturnAddress()
通常返回指向调用者的指针。

没有通用的解决方案。您需要哪个平台?没有通用的解决方案。您需要哪个平台?标准版的
\uuuuu FUNCTION\uuuu
\uuu func\uuuu
顺便说一句@chris-不在我的标准副本中。真正地C++11 one在§8.4.2/8中有它。
\uuuuu FUNCTION\uuuu
\uuuu PRETTY\u FUNC\uuuuu
由大多数编译器实现,即使它们是非标准的。@chris-你说得对。很抱歉(小调nit:8.4.1/8,而不是8.4.2/8)。
\uuuuu FUNCTION\uuuuu
的标准版本是
\uuuu func\uuuuu
顺便说一句。@chris-不在我的标准副本中。真正地C++11 one在§8.4.2/8中有它。
\uuuuu FUNCTION\uuuu
\uuuu PRETTY\u FUNC\uuuuu
由大多数编译器实现,即使它们是非标准的。@chris-你说得对。很抱歉(小nit:是8.4.1/8,不是8.4.2/8)。