幫之前寫的指令 bt 加上參數 -s, 使用 -s 時, 會一併記錄 backtrace 每個 frame 附近的原始碼。
以下是一個範例輸出:
(gdb) bt -s #0 A::hello at b.cpp:8 | class A | { | public: | void hello(int n) | { ->| std::cout << n << std::endl; | } | | void foo(int n) | { #1 A::bar at b.cpp:18 | bar(n + 1); | } | | void bar(int n) | { ->| hello(n + 10); | } | }; | | int main(void) { #2 A::foo at b.cpp:13 | std::cout << n << std::endl; | } | | void foo(int n) | { ->| bar(n + 1); | } | | void bar(int n) | { #3 main at b.cpp:24 | } | }; | | int main(void) { | A a; ->| a.foo(5); | return 0; | }
修改後的 python script 如下:
作法大致和 《用 python gdb 客製化 backtrace 的結果》一樣, 只是改取檔案的 fullname, 再自己讀出相關的原始碼。這部份用 python 實作, 相當地輕鬆寫意。
沒有留言:
張貼留言