[英]How to get information from a namespace polluted memory dump, using windbg "dt" command
[英]How to find out how namespace got polluted?
考慮以下一小段代碼:
// all of these include other headers, lots of code:
#include "myheader1.h"
#include "myheader2.h"
#include <string>
void foo() {
string s("hello world"); // oh no, why does this compile??
}
這個編譯,顯然一些遞歸包含的頭文件有一個
using namespace std;
某處。 您將如何找到違規代碼行的位置?
在所有頭文件上使用grep
實際上不會起作用,因為該語句通常在函數內部使用,它是安全的並且不會污染其余的代碼。
無論如何,grep可能會有用。 搜索“^ using namespace”。 在一個函數里面有一個非常公平的機會它會縮進,但在它之外它不會......
編譯器通常必須給預處理輸出(-E是常見),該得到亦是如此源極線的指示在q上的可能性#line
線。
試着把string s;
在每個#include
語句之后找到它不會導致錯誤的第一個地方。 這將顯示導致問題的標頭。 然后對該標題內的#include
語句執行相同操作,依此類推。
一點手動過程,但不應該花太長時間。
$ g++ -E souce.cpp | less
從較少的類型/using
,然后從那里尋找前一行看起來像
# <file_name> <line_number>
這就是預處理器如何告訴編譯器某些代碼來自哪個源,因此它可以正確地執行錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.