最近,我遇到了一个bug,std::sort函数崩溃了。经过调试,我发现std::sort需要提供的比较函数来满足严格弱序。当我们不熟悉GDB的内部实现时,我们如何使用GDB定位和调试这些类型的问题?我们是否需要了解高级GDB技术,例如查看汇编命令、寄存器或内存?
std::sort
lyfkaqu11#
您需要习惯于黑盒函数在未正确使用时会崩溃。你需要阅读你使用的函数的文档:en.cppreference.com/w/cpp/algorithm/sort和en.cppreference.com/w/cpp/named_req/Compare,并密切关注它们第一个链接第二个明确指出:应用于满足Compare的类型的对象的函数调用操作的返回值在上下文转换为bool时,如果调用的第一个参数出现在该类型引起的严格弱排序关系中的第二个参数之前,则返回值为true,否则返回值为false。不要期望您调用的代码中有太多的非优化asm视图。看看文件
1条答案
按热度按时间lyfkaqu11#
您需要习惯于黑盒函数在未正确使用时会崩溃。你需要阅读你使用的函数的文档:en.cppreference.com/w/cpp/algorithm/sort和en.cppreference.com/w/cpp/named_req/Compare,并密切关注它们
第一个链接第二个明确指出:
应用于满足Compare的类型的对象的函数调用操作的返回值在上下文转换为bool时,如果调用的第一个参数出现在该类型引起的严格弱排序关系中的第二个参数之前,则返回值为true,否则返回值为false。
不要期望您调用的代码中有太多的非优化asm视图。看看文件