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 テスト
なぜ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 (これら 2 つの文字列変数) を行 9 に移動すると、問題ありません。gdb は 18 行目を表示しません! 文字列 var がこのバグを引き起こしているようです。
誰もが私を助けることができますか?ありがとうございました!