debugging 为什么C++调试器单步执行VS代码中的外部代码?

xkftehaa  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(178)
#include<iostream>
#include<string>
using namespace std;

void reverse(string s){
    if(s.length()==0){ //base case
        return;
    }

    string ros=s.substr(1);
    reverse(ros);
    cout<<s[0];
}

int main(){
    reverse("binod");
    
}

debugger_img_1
debugger_img_2
调试器应该进入reverse()函数,但是它打开了这些外部代码。

vu8f3i0k

vu8f3i0k1#

调试器正在单步执行std::string(const char*)构造函数。您的代码在调用reverse之前隐式调用此构造函数,因为您将"binod"(实际上具有const char*类型)传递给需要std::string的函数。
这里没有什么问题,不是函数出错,只是你没有意识到函数被调用了。只要退出,然后再进入。
旁注:Visual Studio的调试器具有“仅我的代码!”功能,启用该功能后,意味着调试器仅单步执行您编写的代码。这可以节省大量时间。

相关问题