幫之前寫的指令 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 實作, 相當地輕鬆寫意。
沒有留言:
張貼留言