2012-12-13 120 views
1

我有一個程序,在調試模式下編譯。然而,當我做LDD:如何鏈接libc6-dbg而不是libc6

libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00821000) 
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x0083c000) 
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00921000) 
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x009ac000) 
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x152fa000) 
libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0x0094d000) 
... 

我看不出這裏有什麼調試符號...

我的程序崩潰,我必須在gdb BT是輸出:

#0 0x00007f2f95ca7030 in ??() 
#1 0x00007f3013edd801 in ??() 
#2 0x0002965300014c4c in ??() 
#3 0x00007f305e3006c0 in ??() 
#4 0x00007f3000000084 in ??() 
#5 0x00007f3000000002 in ??() 
#6 0x00007f307a57aec0 in ??() 
#7 0x000000000494c740 in ??() 
#8 0x00007f3092e93720 in ??() from /lib/x86_64-linux-gnu/libc.so.6 
#9 0x0000000000000030 in ??() 
#10 0x000000000b85de60 in ??() 
#11 0x00007f305f913000 in ??() 
#12 0x00007f3095cbe750 in ??() 
#13 0x00007f3089eb2390 in ??() 
#14 0x00007f3095cc4a88 in ??() 
#15 0x00007f30956b4d78 in ??() from /usr/lib/x86_64-linux-gnu/libQtScript.so.4 
#16 0x00007f3095cc3800 in ??() 
#17 0x00007f3089eb2000 in ??() 
#18 0x00007f3088c41230 in ??() 
#19 0x00007f30956b4d78 in ??() from /usr/lib/x86_64-linux-gnu/libQtScript.so.4 
#20 0x0000000004c35488 in ??() 
#21 0x00007f3089eb2060 in ??() 
#22 0x00007f3095cbe738 in ??() 
#23 0x00007f30952c83a1 in ??() from /usr/lib/x86_64-linux-gnu/libQtScript.so.4 
#24 0x00007f309535f567 in ??() from /usr/lib/x86_64-linux-gnu/libQtScript.so.4 
#25 0x00007f30953349a2 in ??() from /usr/lib/x86_64-linux-gnu/libQtScript.so.4 
#26 0x00007f30954176ce in QScriptValue::call(QScriptValue const&, QList<QScriptValue> const&)() from /usr/lib/x86_64-linux-gnu/libQtScript.so.4 
... (Readable backtrace from my code) 

所以我的問題是,我如何鏈接到libc6的調試版本?如果我知道要傳遞給編譯器的話,我可以把它放在qmake文件中,這樣就可以編譯。

我也安裝了libc6-dbg。

謝謝。

回答

1

我看不出這裏有什麼調試符號...

你如何獲得的堆棧跟蹤目前尚不清楚。很可能你沒有正確調用GDB。

如何來鏈接的libc6-DBG,而不是僅僅libc6的

你做這樣的事。 libc6-dbg包裝用品separate debug files。你不要鏈接它們--GDB知道如何自動加載它們。

+0

爲了記錄,下面的其餘回溯*是*可讀的。 – coyotte508

0

您可以通過在Qmake文件CONFIG宏提供不同的配置:

CONFIG(debug, debug|release) { 
    LIBS += -llibc6-dbg 
} else { 
    LIBS += -llibc6 
} 

如果你想了解的語法:它告訴qmake將檢查在CONFIG可變的選項debugrelease ,如果發現debug,則執行第一個路徑,否則執行第二個路徑。

如果您遇到任何問題,this forum thread可能會對您有所幫助。

+0

找不到-llibc6-dbg,它唯一能找到的就是-lc – coyotte508

+0

我以爲它會和libc6在同一個文件夾中。如果它位於不同的文件夾中,則必須將'-Lpath/to/the/lib'添加到'LIBS'變量中。 –

+0

libc6-dbg軟件包提供了/usr/lib/debug/lib/x86_64-linux-gnu/libc-2.15.so,但是與該庫的鏈接將導致立即崩潰 - 它不適用於鏈接,並且不包含可執行文件代碼,只有調試信息。 –