1 #include "string"
2 using namespace std;
3
4 bool m_bInited = true;
5 int m_imaxsize = 100;
6
7 int test()
8 {
9 if (!m_bInited)
10 {
11 return -1;
12 }
13
14 std::string gbkInput = "";
15 std::string utf8Input = "";
16 if (gbkInput.size() > m_imaxsize)
17 {
18 return 1;
19 }
20 return 0;
21 }
22
23 int main()
24 {
25 test();
26 return 0;
27 }
从第 16 行开始使用 gdb 步骤时,调试顺序为:
第 16 行 -> 第 20 行 -> 第 18 行 -> 第 21 行。
(gdb) b 16
(gdb) r
Breakpoint 1, test () at main.cpp:16
16 if (gbkInput.size() > m_imaxsize)
(gdb) n
20 return 0;
(gdb) n
18 return 1;
(gdb) n
21 }
编译:g++ -g main.cpp -o test
为什么 gdb 显示第 18 行?并且 test() 返回值为 0。
我的 gcc 版本是 4.1.2。GNU gdb Fedora (6.8-37.el5) 或 GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-37.el5)。两个 gdb 版本都有这个问题。
顺便说一句:如果将第 14 行、第 15 行(这两个字符串 var)移动到第 9 行,就可以了。gdb 不会显示第 18 行!似乎字符串 var 导致了这个错误。
每个人都可以帮助我吗?谢谢!