因为各种你懂的原因,访问google的服务总是出错,先是hosts不工作,代理也不好使,最后终于可以短暂访问了。我的版本还是采用svn维护的,直接svn update也不行。试试git吧,一晚上才下载了120M,这得要猴年马月才能下完那。找找tarball吧,TNND,尽然google删除了tarball!好在可以通过git的tgz方式变通的拿到tarball,一更新得到提示:ubuntu14.04不支持,算了,再整个30G的空间装个Ubuntu12.04吧,“尝尽了生活的苦,找不到可以相信的人”,
下了个dep_tool又不通了。一运行gclient报错:
gclient runhooks:
/.gclient: line 8: solutions: command not found
./.gclient: line 9: name: command not found
./.gclient: line 10: url: command not found
./.gclient: line 11: custom_deps: command not found
./.gclient: line 16: src/third_party/WebKit/LayoutTests:: No such file or directory
./.gclient: line 17: src/chrome_frame/tools/test/reference_build/chrome:: No such file or directory
./.gclient: line 18: src/chrome/tools/test/reference_build/chrome_mac:: No such file or directory
./.gclient: line 19: src/chrome/tools/test/reference_build/chrome_win:: No such file or directory
./.gclient: line 20: src/chrome/tools/test/reference_build/chrome_linux:: No such file or directory
./.gclient: line 22: syntax error near unexpected token `}‘
./.gclient: line 22: ` }‘
算了,那就不更新吧,直接在老版本上build吧:
./build/install-build-deps.sh
提示我64位的kernel编译32位的代码不再获得推荐:
We no longer recommend that you use this script to install
32bit libraries on a 64bit system. Instead, consider using
the install-chroot.sh script to help you set up a 32bit
environment for building and testing 32bit versions of Chrome.
If you nonetheless want to try installing 32bit libraries
directly, you can do so by explicitly passing the --lib32
option to install-build-deps.sh.
Exiting without installing any 32bit libraries.
逗我玩呢,劝我改用install-chroot.sh?
./build/install-chroot.sh
The following targets are available to be installed in a chroot:
1: breezy
2: dapper
3: edgy
26: stable
27: testing
28: trusty
29: unstable
30: utopic
31: vivid
32: warty
33: wheezy
34: woody
You are running a 64bit kernel. This allows you to install either a
32bit or a 64bit chroot environment. Which one do you want (32, 64) 32
I: Retrieving Release
W: Cannot check Release signature; keyring file not available /usr/share/keyrings/debian-archive-keyring.gpg
I: Retrieving Packages
算了,还是取消用这个编译吧:加上--lib32
./build/install-build-deps.sh --lib32
build/gyp_chromium -Dflag1=value1 -Dflag2=value2
然后编译:make chrome -j4
出错了:
net/base/x509_certificate_nss.cc: In function ‘void net::{anonymous}::ParsePrincipal(CERTName*, net::CertPrincipal*)’:
net/base/x509_certificate_nss.cc:75:46: error: invalid conversion from ‘char* (*)(const CERTName*) {aka char* (*)(const CERTNameStr*)}’ to ‘CERTGetNameFunc {aka char* (*)(CERTNameStr*)}’ [-fpermissive]
改之:
// Get CN, L, S, and C. #if Michael_Chromium_Patch CERTGetNameFunc get_name_funcs[4] = { (char*(*)(CERTNameStr*))CERT_GetCommonName, (char*(*)(CERTNameStr*))CERT_GetLocalityName, (char*(*)(CERTNameStr*))CERT_GetStateName, (char*(*)(CERTNameStr*))CERT_GetCountryName }; #else CERTGetNameFunc get_name_funcs[4] = { CERT_GetCommonName, CERT_GetLocalityName, CERT_GetStateName, CERT_GetCountryName }; #endif
make chrome -j
AR(target) out/Debug/obj.target/third_party/WebKit/Source/WebKit/chromium/libwebkit.a
COPY out/Debug/chrome-wrapper
ACTION Generating manpage out/Debug/chrome.1
COPY out/Debug/xdg-mime
COPY out/Debug/xdg-settings
COPY out/Debug/product_logo_48.png
CXX(target) out/Debug/obj.target/chrome/chrome/app/chrome_main.o
CXX(target) out/Debug/obj.target/chrome/chrome/app/chrome_exe_main_gtk.o
CXX(target) out/Debug/obj.target/chrome/chrome/app/chrome_main_delegate.o
LINK(target) out/Debug/chrome
^[ LINK(target) out/Debug/chrome: Finished
谢天谢地,终于过了!
cd out/Debug and run chrome
My god! crash :(
[2560:2560:1091621926:FATAL:field_trial.cc(183)] Check failed: next_group_number_ > kDefaultGroupNumber + 1 (1 vs. 1)
Backtrace:
base::debug::StackTrace::StackTrace() [0x55555743f072]
logging::LogMessage::~LogMessage() [0x555557469635]
base::FieldTrial::SetForced() [0x55555742d1b2]
VariationsService::CreateTrialFromStudy() [0x55555713a558]
VariationsService::CreateTrialsFromSeed() [0x555557138e28]
ChromeBrowserMainParts::SetupMetricsAndFieldTrials() [0x5555570da3bd]
ChromeBrowserMainParts::PreCreateThreadsImpl() [0x5555570ddf1a]
ChromeBrowserMainParts::PreCreateThreads() [0x5555570dcfea]
content::BrowserMainLoop::CreateThreads() [0x555559b7c890]
(anonymous namespace)::BrowserMainRunnerImpl::Initialize() [0x555559b7e97f]
BrowserMain() [0x555559b7b34b]
content::RunNamedProcessTypeMain() [0x5555573aff00]
content::ContentMainRunnerImpl::Run() [0x5555573b0b74]
content::ContentMain() [0x5555573af573]
ChromeMain [0x55555668447d]
main [0x55555668443c]
0x7ffff203f76d
0x555556684349
调试一下吧:
gdb chrome and show call stack:
[32321:32321:43801153618:WARNING:zygote_host_impl_linux.cc(165)] Running without the SUID sandbox! See http://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[32347:32347:43817254895:INFO:gl_context_glx.cc(135)] Offscreen context was direct.
Segmentation fault (core dumped)
[cpp] view plaincopy
- // This will be called after the command-line has been mutated by about:flags
- void ChromeBrowserMainParts::SetupMetricsAndFieldTrials() {
- MetricsService* metrics = browser_process_->metrics_service();
- if (IsMetricsReportingEnabled())
- metrics->ForceClientIdCreation(); // Needed below.
- field_trial_list_.reset(
- new base::FieldTrialList(metrics->GetEntropySource()));
- // Ensure any field trials specified on the command line are initialized.
- // Also stop the metrics service so that we don‘t pollute UMA.
- #ifndef NDEBUG
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kForceFieldTrials)) {
- std::string persistent = command_line->GetSwitchValueASCII(
- switches::kForceFieldTrials);
- bool ret = base::FieldTrialList::CreateTrialsFromString(persistent);
- CHECK(ret) << "Invalid --" << switches::kForceFieldTrials <<
- " list specified.";
- }
- #endif // NDEBUG
- VariationsService* variations_service =
- browser_process_->variations_service();
- variations_service->CreateTrialsFromSeed(browser_process_->local_state());
- }
[cpp] view plaincopy
- void BrowserProcessImpl::CreateLocalState() {
- DCHECK(!created_local_state_ && local_state_.get() == NULL);
- created_local_state_ = true;
- FilePath local_state_path;
- PathService::Get(chrome::FILE_LOCAL_STATE, &local_state_path);
- local_state_.reset(
- PrefService::CreatePrefService(local_state_path, policy_service(), NULL,
- false));
- // Initialize the prefs of the local state.
- browser::RegisterLocalState(local_state_.get());
- }
[cpp] view plaincopy
- // TODO(brettw): this function does not handle long paths (filename > MAX_PATH)
- // characters). This isn‘t supported very well by Windows right now, so it is
- // moot, but we should keep this in mind for the future.
- // static
- bool PathService::Get(int key, FilePath* result) {
- // special case the current directory because it can never be cached
- if (key == base::DIR_CURRENT)
- return file_util::GetCurrentDirectory(result);
- if (GetFromCache(key, result))
- return true;
- AddToCache(key, path);
- *result = path;
- return true;
- }
坏蛋终于现身了,注意看路径path_:
p *result
$60 = {static kSeparators = 0x55555ad404c0 "/", static kCurrentDirectory = <same as static member of an already seen type>,
static kParentDirectory = <same as static member of an already seen type>, static kExtensionSeparator = 46 ‘.‘, path_ =
"/home/michael/.config/chromium/Local State"}
(gdb)
删除这个Local State,chrome就跑起来了,原因就是第一次run起来chrome后,我点击了“是否恢复上次的网页”的是按钮,导致本地状态解析出错,请看此文件末端的一堆seed数据(它就是老鼠):
Local State:
"uninstall_metrics": {
"installation_date2": "1426134422",
"launch_count": "2"
},
"user_experience_metrics": {
"low_entropy_source": 2024,
"session_id": 1,
"stability": {
"breakpad_registration_fail": 2,
"breakpad_registration_ok": 0,
"crash_count": 1,
"debugger_not_present": 2,
"debugger_present": 0,
"exited_cleanly": false,
"incomplete_session_end_count": 0,
"last_timestamp_sec": "0",
"launch_count": 2,
"launch_time_sec": "1426138598",
"page_load_count": 0,
"renderer_crash_count": 0,
"renderer_hang_count": 0,
"session_end_completed": true,
"stats_buildtime": "1426159202",
"stats_version": "21.0.1167.0-64-devel"
}
},
"variations_seed": "CigxMTZhNmMwMTN1Z2dlc3RVbmlmaWNhdGlvbl9BNV9TdGFibGUQARj/k8oBIP......