Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
如何查看GDB中返回的且未定义为独立变量的函数arg的值 我仍然在了解C++和gdB的用法. _C++_Gdb - Fatal编程技术网

如何查看GDB中返回的且未定义为独立变量的函数arg的值 我仍然在了解C++和gdB的用法.

如何查看GDB中返回的且未定义为独立变量的函数arg的值 我仍然在了解C++和gdB的用法. ,c++,gdb,C++,Gdb,我有下面的程序,在将其传递到函数之前声明并初始化了一个变量startPos。使用GDB单步执行时,我可以在评估后打印startPos,并查看其值 #include <iostream> #include <string> in

我有下面的程序,在将其传递到函数之前声明并初始化了一个变量
startPos
。使用GDB单步执行时,我可以
在评估后打印startPos
,并查看其值

#include <iostream>                                                             
#include <string>                                                               

int main(){                                                                     
    // replace the word red with blue                                      
    std::string toReplace{ "red" };                                                                                                                         
    std::string str{ "I saw a red car yesterday." }; 

    long unsigned startPos{ str.find("red") };                                
    str.replace(startPos, toReplace.length(), "blue");                                          

    std::cout << str << '\n';                                                   

    return 0;                                                                   
} 
但是现在我无法查看进入gdb时str.find(“red”)的计算结果。我尝试了
info locals
info args
,但它们没有显示我需要什么,或者我用错了

如何使用gdb查看返回值是什么或传递到函数中的是什么


PS:我将跳过任何标准库函数

您应该重新考虑不要进入库函数,而是进入它,然后立即
f
ini,从中返回,gdb将显示返回值。这是唯一的方法吗?我不想这样做,因为考虑到标准库的大量重用,“考虑到标准库的大量重用”是一个很大的不便。无论采用哪种方式,都必须在函数调用之前设置断点。在此之前,调试会话没有什么不同,这归结为快速执行三个命令,而不是一个命令。对我来说似乎没什么大不了的,特别是因为这只需要做一到两次,直到最初的问题被调试出来,每个人都开始做更大更好的事情。我的意思是,我不一定知道问题在特定的代码块中。因此,我将在我知道的最后一个位置设置一个断点,该位置可以正常工作,并且是一行一行地执行
step
。我经常使用(重用)标准库函数,如果我不跳过所有
/usr/include/*
头文件和源文件,我将始终如一地使用它们。但是你的意思是,如果我跳过标准库函数,就没有其他方法可以查看函数的参数是如何计算的?正确。调试器无法预见未来。在函数调用实际发生之前,调试器无法告诉您哪个参数被传递到函数调用中。您应该重新考虑不进入库函数,而是进入库函数,然后立即
f
ini,从库函数返回,gdb将显示返回值。这是唯一的方法吗?我不想这样做,因为考虑到标准库的大量重用,“考虑到标准库的大量重用”是一个很大的不便。无论采用哪种方式,都必须在函数调用之前设置断点。在此之前,调试会话没有什么不同,这归结为快速执行三个命令,而不是一个命令。对我来说似乎没什么大不了的,特别是因为这只需要做一到两次,直到最初的问题被调试出来,每个人都开始做更大更好的事情。我的意思是,我不一定知道问题在特定的代码块中。因此,我将在我知道的最后一个位置设置一个断点,该位置可以正常工作,并且是一行一行地执行
step
。我经常使用(重用)标准库函数,如果我不跳过所有
/usr/include/*
头文件和源文件,我将始终如一地使用它们。但是你的意思是,如果我跳过标准库函数,就没有其他方法可以查看函数的参数是如何计算的?正确。调试器无法预见未来。在函数调用实际发生之前,调试器无法告诉您哪个参数被传递到函数调用中。
#include <iostream>                                                             
#include <string>                                                               

int main(){                                                                     
    // replace the word with red with blue                                      
    std::string toreplace{ "red" };                                             
    std::string str{ "i saw a red car yesterday." };   

    str.replace(str.find("red"), toReplace.length(), "blue");                   

    std::cout << str << '\n';                                                   

    return 0;                                                                   
}