Downloads & Free Reading Options - Results
Computer Programming And Architecture by Henry M. Levy
Read "Computer Programming And Architecture" by Henry M. Levy through these free online access and download options.
Books Results
Source: The Internet Archive
The internet Archive Search Results
Available books for downloads and borrow from The internet Archive
1Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings
“Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings” Metadata:
- Title: ➤ Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings
- Language: English
“Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings” Subjects and Themes:
Edition Identifiers:
- Internet Archive ID: functionalprogra0000unse_n5b3
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 1843.96 Mbs, the file-s for this book were downloaded 19 times, the file-s went public at Sat Apr 23 2022.
Available formats:
ACS Encrypted PDF - AVIF Thumbnails ZIP - Cloth Cover Detection Log - DjVuTXT - Djvu XML - Dublin Core - EPUB - Item Tile - JPEG Thumb - JSON - LCP Encrypted EPUB - LCP Encrypted PDF - Log - MARC - MARC Binary - Metadata - OCR Page Index - OCR Search Text - PNG - Page Numbers JSON - RePublisher Final Processing Log - RePublisher Initial Processing Log - Scandata - Single Page Original JP2 Tar - Single Page Processed JP2 ZIP - Text PDF - Title Page Detection Log - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
2Computer Architecture And VAX Assembly Language Programming
By Brink, James E
“Computer Architecture And VAX Assembly Language Programming” Metadata:
- Title: ➤ Computer Architecture And VAX Assembly Language Programming
- Author: Brink, James E
- Language: English
“Computer Architecture And VAX Assembly Language Programming” Subjects and Themes:
- Subjects: ➤ Computer architecture - VAX-11 (Computer) -- Programming - Assembly languages (Electronic computers)
Edition Identifiers:
- Internet Archive ID: computerarchitec0000brin
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 1213.50 Mbs, the file-s for this book were downloaded 85 times, the file-s went public at Fri Jun 03 2022.
Available formats:
ACS Encrypted PDF - AVIF Thumbnails ZIP - Cloth Cover Detection Log - DjVuTXT - Djvu XML - Dublin Core - EPUB - Item Tile - JPEG Thumb - JSON - LCP Encrypted EPUB - LCP Encrypted PDF - Log - MARC - MARC Binary - Metadata - OCR Page Index - OCR Search Text - PNG - Page Numbers JSON - RePublisher Final Processing Log - RePublisher Initial Processing Log - Scandata - Single Page Original JP2 Tar - Single Page Processed JP2 ZIP - Text PDF - Title Page Detection Log - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Computer Architecture And VAX Assembly Language Programming at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
3NASA Technical Reports Server (NTRS) 19830026336: Survey Of New Vector Computers: The CRAY 1S From CRAY Research; The CYBER 205 From CDC And The Parallel Computer From ICL - Architecture And Programming
By NASA Technical Reports Server (NTRS)
Problems which can arise with vector and parallel computers are discussed in a user oriented context. Emphasis is placed on the algorithms used and the programming techniques adopted. Three recently developed supercomputers are examined and typical application examples are given in CRAY FORTRAN, CYBER 205 FORTRAN and DAP (distributed array processor) FORTRAN. The systems performance is compared. The addition of parts of two N x N arrays is considered. The influence of the architecture on the algorithms and programming language is demonstrated. Numerical analysis of magnetohydrodynamic differential equations by an explicit difference method is illustrated, showing very good results for all three systems. The prognosis for supercomputer development is assessed.
“NASA Technical Reports Server (NTRS) 19830026336: Survey Of New Vector Computers: The CRAY 1S From CRAY Research; The CYBER 205 From CDC And The Parallel Computer From ICL - Architecture And Programming” Metadata:
- Title: ➤ NASA Technical Reports Server (NTRS) 19830026336: Survey Of New Vector Computers: The CRAY 1S From CRAY Research; The CYBER 205 From CDC And The Parallel Computer From ICL - Architecture And Programming
- Author: ➤ NASA Technical Reports Server (NTRS)
- Language: English
“NASA Technical Reports Server (NTRS) 19830026336: Survey Of New Vector Computers: The CRAY 1S From CRAY Research; The CYBER 205 From CDC And The Parallel Computer From ICL - Architecture And Programming” Subjects and Themes:
- Subjects: ➤ NASA Technical Reports Server (NTRS) - ARCHITECTURE (COMPUTERS) - CDC COMPUTERS - COMPUTATION - COMPUTER PROGRAMMING - COMPUTER SYSTEMS PERFORMANCE - CRAY COMPUTERS - PARALLEL PROCESSING (COMPUTERS) - PIPELINING (COMPUTERS) - ALGORITHMS - DIFFERENTIAL EQUATIONS - FORTRAN - MAGNETOHYDRODYNAMICS - PROBLEM SOLVING - Gentzsch, W.
Edition Identifiers:
- Internet Archive ID: NASA_NTRS_Archive_19830026336
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 26.63 Mbs, the file-s for this book were downloaded 78 times, the file-s went public at Mon Aug 15 2016.
Available formats:
Abbyy GZ - Animated GIF - Archive BitTorrent - DjVuTXT - Djvu XML - Item Tile - Metadata - Scandata - Single Page Processed JP2 ZIP - Text PDF -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find NASA Technical Reports Server (NTRS) 19830026336: Survey Of New Vector Computers: The CRAY 1S From CRAY Research; The CYBER 205 From CDC And The Parallel Computer From ICL - Architecture And Programming at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
4Computer Programming And Architecture--the VAX-11
By Levy, Henry M., 1952- and Eckhouse, Richard H., 1940- joint author
Problems which can arise with vector and parallel computers are discussed in a user oriented context. Emphasis is placed on the algorithms used and the programming techniques adopted. Three recently developed supercomputers are examined and typical application examples are given in CRAY FORTRAN, CYBER 205 FORTRAN and DAP (distributed array processor) FORTRAN. The systems performance is compared. The addition of parts of two N x N arrays is considered. The influence of the architecture on the algorithms and programming language is demonstrated. Numerical analysis of magnetohydrodynamic differential equations by an explicit difference method is illustrated, showing very good results for all three systems. The prognosis for supercomputer development is assessed.
“Computer Programming And Architecture--the VAX-11” Metadata:
- Title: ➤ Computer Programming And Architecture--the VAX-11
- Authors: ➤ Levy, Henry M., 1952-Eckhouse, Richard H., 1940- joint author
- Language: English
“Computer Programming And Architecture--the VAX-11” Subjects and Themes:
- Subjects: ➤ VAX-11 (Computer) - Assembler language (Computer program language) - Computer architecture - VAX-11 (Ordinateur) - Langage assembleur (Langage de programmation) - Ordinateurs - Programmeren (computers) - Computerarchitectuur - Computerarchitektur - Programmierung - VAX 11
Edition Identifiers:
- Internet Archive ID: computerprogramm00levy
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 439.53 Mbs, the file-s for this book were downloaded 246 times, the file-s went public at Mon Oct 04 2010.
Available formats:
ACS Encrypted PDF - Abbyy GZ - Animated GIF - Cloth Cover Detection Log - DjVuTXT - Djvu XML - Dublin Core - EPUB - Grayscale PDF - Item Tile - JSON - LCP Encrypted EPUB - LCP Encrypted PDF - MARC - MARC Binary - MARC Source - Metadata - Metadata Log - OCLC xISBN JSON - OCR Page Index - OCR Search Text - Page Numbers JSON - Scandata - Single Page Original JP2 Tar - Single Page Processed JP2 ZIP - Text PDF - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Computer Programming And Architecture--the VAX-11 at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
5Dec :: Books :: Digital Press :: Levy Computer Programming And Architecture The VAX 1989
From the bitsavers.org collection, a scanned-in computer-related document. dec :: Books :: Digital Press :: Levy Computer Programming and Architecture The VAX 1989
“Dec :: Books :: Digital Press :: Levy Computer Programming And Architecture The VAX 1989” Metadata:
- Title: ➤ Dec :: Books :: Digital Press :: Levy Computer Programming And Architecture The VAX 1989
- Language: English
Edition Identifiers:
- Internet Archive ID: ➤ bitsavers_decBooksDiterProgrammingandArchitectureTheVAX1989_20158190
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 332.12 Mbs, the file-s for this book were downloaded 65 times, the file-s went public at Sat Sep 02 2023.
Available formats:
Archive BitTorrent - DjVuTXT - Djvu XML - Item Tile - Metadata - OCR Page Index - OCR Search Text - Page Numbers JSON - Scandata - Single Page Processed JP2 ZIP - Text PDF - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Dec :: Books :: Digital Press :: Levy Computer Programming And Architecture The VAX 1989 at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
6Computer Systems : Architecture, Organization, And Programming
By Maccabe, Arthur B
From the bitsavers.org collection, a scanned-in computer-related document. dec :: Books :: Digital Press :: Levy Computer Programming and Architecture The VAX 1989
“Computer Systems : Architecture, Organization, And Programming” Metadata:
- Title: ➤ Computer Systems : Architecture, Organization, And Programming
- Author: Maccabe, Arthur B
- Language: English
“Computer Systems : Architecture, Organization, And Programming” Subjects and Themes:
- Subjects: Computer architecture - Computer organization
Edition Identifiers:
- Internet Archive ID: computersystemsa0000macc
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 1230.63 Mbs, the file-s for this book were downloaded 109 times, the file-s went public at Wed Sep 04 2019.
Available formats:
ACS Encrypted EPUB - ACS Encrypted PDF - Abbyy GZ - Cloth Cover Detection Log - DjVuTXT - Djvu XML - Dublin Core - Item Tile - JPEG Thumb - JSON - LCP Encrypted EPUB - LCP Encrypted PDF - Log - MARC - MARC Binary - Metadata - OCR Page Index - OCR Search Text - PNG - Page Numbers JSON - Scandata - Single Page Original JP2 Tar - Single Page Processed JP2 ZIP - Text PDF - Title Page Detection Log - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Computer Systems : Architecture, Organization, And Programming at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
7The Chromium Logo The Chromium Projects Home Chromium ChromiumOS Quick Links Report Bugs Discuss Other Sites Chromium Blog Google Chrome Extensions Except As Otherwise Noted, The Content Of This Page Is Licensed Under A Creative Commons Attribution 2.5 License, And Examples Are Licensed Under The BSD License. Privacy Edit This Page For Developers > How-Tos > Debugging Chromium On Windows First See Get The Code For Checkout And Build Instructions. Getting Started You Can Use Visual Studio's Built-in Debugger Or WinDBG To Debug Chromium. You Don't Need To Use The IDE To Build In Order To Use The Debugger: Autoninja Is Used To Build Chromium And Most Developers Invoke It From A Command Prompt, And Then Open The IDE For Debugging As Necessary. To Start Debugging An Already-built Executable With Visual Studio Just Launch Visual Studio (2019 Or Higher) And Select File-> Open-> Project/Solution (Ctrl+Shift+O) And Select The Executable Of Interest. This Will Create A Solution With That Executable As The 'project'. You Can Then Launch The Debugger With F5 Or F11 Or From The Debug Menu. If You Right-click On The Executable In Solution Explorer And Select Properties Then You Can Edit Things Such As The Executable Path, Command-line Arguments, And Working Directory. You Can Add Additional Executables To The Solution By Using File-> Add-> Existing Project And Selecting Another Already-built Executable. You Can Select Which One To Debug By Right-clicking On One Of Them In Solution Explorer And Selecting Set As Startup Project. When Your Solution File Is Customized To Your Taste You Can Save It To A Directory Such As Out\solutions. Saving It There Helps Ensure That Relative Paths To Source Files, Printed From Build Commands, Will Correctly Identify The Source Files. The Tools Menu Can Be Used To Add Commands To Do Things Like Invoke Autoninja To Build Chrome, Compile The Selected Source File, Or Other Things. Visual Studio 2017 Is Not Recommended For Debugging Of Chromium - Use A Newer Version For Best Performance And Stability. Symbol_level=2 Is The Default On Windows And Gives Full Debugging Information With Types, Locals, Globals, Function Names, And Source/line Information. Symbol_level=1 Creates Smaller PDBs With Just Function Names, And Source/line Information - Source-level Debugging Is Still Supported (new From June 2019), But Local Variables And Type Information Are Missing. Symbol_level=0 Gives Extremely Limited Debugging Abilities, Mostly Just Viewing Call Stacks When Chromium Crashes. Browsing Source Code If You Use A Solution File Generated By Gn (gn Gen --ide=vs) Then Intellisense May Help You Navigate The Code. If This Doesn't Work Or If You Use A Solution Created As Above Then You May Want To Install VsChromium To Help Navigate The Code, As Well As Using Https://source.chromium.org. Profiles It's A Good Idea To Use A Different Chrome Profile For Your Debugging. If You Are Debugging Google Chrome Branded Builds, Or Use A Chromium Build As Your Primary Browser, The Profiles Can Collide So You Can't Run Both At Once, And Your Stable Browser Might See Profile Versions From The Future (Google Chrome And Chromium Use Different Profile Directories By Default So Won't Collide). Use The Command-line Option: --user-data-dir=C:\tmp\my_debug_profile (replace The Path As Necessary) Using The IDE, Go To The Debugging Tab Of The Properties Of The Chrome Project, And Set The Command Arguments. Chrome Debug Log Enable Chrome Debug Logging To A File By Passing --enable-logging --v=1 Command-line Flags At Startup. Debug Builds Place The Chrome_debug.log File In The Out\Debug Directory. Release Builds Place The File In The Top Level Of The User Data Chromium App Directory, Which Is OS-version-dependent. For More Information, See Logging And User Data Directory Details. Symbol Server If You Are Debugging Official Google Chrome Release Builds, Use The Symbol Server: Https://chromium-browser-symsrv.commondatastorage.googleapis.com In Visual Studio, This Goes In Tools > Options Under Debugging > Symbols. You Should Set Up A Local Cache In A Empty Directory On Your Computer. In Windbg You Can Add This To Your Symbol Server Search Path With The Command Below, Where C:\symbols Is A Local Cache Directory: .sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Alternately, You Can Set The _NT_SYMBOL_PATH Environment Variable To Include Both The Microsoft And Google Symbol Servers - VS, Windbg, And Other Tools Should Both Respect This Environment Variable: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Note That Symbol Servers Will Let The Debuggers Download Both The PE Files (DLLs And EXEs) And The PDB Files. Chrome Often Loads Third Party Libraries And Partial Symbols For Some Of These Are Also Public. For Example: AMD: Https://download.amd.com/dir/bin Nvidia: Https://driver-symbols.nvidia.com/ Intel: Https://software.intel.com/sites/downloads/symbols/ For Example, For Completeness, The Following Symbol Server Environment Variable Will Resolve All Of The Above Sources - But This Is More Than Is Normally Needed: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://download.amd.com/dir/bin;SRV\*C:\symbols\*https://driver-symbols.nvidia.com/;SRV\*C:\symbols\*https://software.intel.com/sites/downloads/symbols/ Source Indexing You Should Set Up Source Indexing In Your Debugger (.srcfix In Windbg, Tools-> Options-> Debugging-> General-> Enable Source Server Support In Visual Studio) So That The Correct Source Files Will Automatically Be Downloaded Based On Information In The Downloaded Symbols. Additionally, You Must Have Python In Your Path In Order For The Command That Fetches Source Files To Succeed; Launching The Debugger From The Same Environment As Where You Build Chromium Is An Easy Way To Ensure It's Present. This Is Highly Recommended When Debugging Released Google Chrome Builds Or Looking At Crash Dumps. Having The Correct Version Of The Source Files Automatically Show Up Saves Significant Time So You Should Definitely Set This. Multi-process Issues Chromium Can Be Challenging To Debug Because Of Its Multi-process Architecture. When You Select Run In The Debugger, Only The Main Browser Process Will Be Debugged. The Code That Actually Renders Web Pages (the Renderer) And The Plugins Will Be In Separate Processes That's Not (yet!) Being Debugged. The ProcessExplorer Tool Has A Process Tree View Where You Can See How These Processes Are Related. You Can Also Get The Process IDs Associated With Each Tab From The Chrome Task Manager (right-click On An Empty Area Of The Window Title Bar To Open). Automatically Attach To Child Processes There Are Two Visual Studio Extensions That Enable The Debugger To Automatically Attach To All Chrome Processes, So You Can Debug All Of Chrome At Once. Microsoft's Child Process Debugging Power Tool Is A Standalone Extension For This, And VsChromium Is Another Option That Bundles Many Other Additional Features. In Addition To Installing One Of These Extensions, You Must Run Visual Studio As Administrator, Or It Will Silently Fail To Attach To Some Of Chrome's Child Processes. Single-process Mode One Way To Debug Issues Is To Run Chromium In Single-process Mode. This Will Allow You To See The Entire State Of The Program Without Extra Work (although It Will Still Have Many Threads). To Use Single-process Mode, Add The Command-line Flag --single-process This Approach Isn't Perfect Because Some Problems Won't Manifest Themselves In This Mode And Some Features Don't Work And Worker Threads Are Still Spawned Into New Processes. Manually Attaching To A Child Process You Can Attach To The Running Child Processes With The Debugger. Select Tools > Attach To Process And Click The Chrome.exe Process You Want To Attach To. Before Attaching, Make Sure You Have Selected Only Native Code When Attaching To The Process This Is Done By Clicking Select... In The Attach To Process Window And Only Checking Native. If You Forget This, It May Attempt To Attach In "WebKit" Mode To Debug JavaScript, And You'll Get An Error Message "An Operation Is Not Legal In The Current State." You Can Now Debug The Two Processes As If They Were One. When You Are Debugging Multiple Processes, Open The Debug > Windows > Processes Window To Switch Between Them. Sometimes You Are Debugging Something That Only Happens On Startup, And Want To See The Child Process As Soon As It Starts. Use: --renderer-startup-dialog --no-sandbox You Have To Disable The Sandbox Or The Dialog Box Will Be Prohibited From Showing. When The Dialog Appears, Visit Tools > Attach To Process And Attach To The Process Showing The Renderer Startup Dialog. Now You're Debugging In The Renderer And Can Continue Execution By Pressing OK In The Dialog. Startup Dialogs Also Exist For Other Child Process Types: --gpu-startup-dialog, --ppapi-startup-dialog, --utility-startup-dialog, --plugin-startup-dialog (for NPAPI). For Utilities, You Can Add A Service Type --utility-startup-dialog=data_decoder.mojom.DataDecoderService. You Can Also Try The Vs-chromium Plug-in To Attach To The Right Processes. Semi-automatically Attaching The Debugger To Child Processes The Following Flags Cause Child Processes To Wait For 60 Seconds In A Busy Loop For A Debugger To Attach To The Process. Once Either Condition Is True, It Continues On; No Exception Is Thrown. --wait-for-debugger-children[=filter] The Filter, If Provided, Will Fire Only If It Matches The --type Parameter To The Process. Values Include Renderer, Plugin (for NPAPI), Ppapi, Gpu-process, And Utility. When Using This Option, It May Be Helpful To Limit The Number Of Renderer Processes Spawned, Using: --renderer-process-limit=1 Image File Execution Options Using Image File Execution Options (IFEO) Will Not Work Because CreateProcess() Returns The Handle To The Debugger Process Instead Of The Intended Child Process. There Are Also Issues With The Sandbox. Time Travel Debugging You Can Do Time Travel Debugging Using WinDbg Preview (must Be Installed From The Microsoft Store). This Lets You Execute A Program Forward And Backwards. After Capturing A Trace, You Can Set Breakpoints And Step Through Code As Normal, But Also Provides 'backwards' Commands (g-, T-, P-) So That You Can Go Back And Forth Through The Execution. It Is Especially Useful To Set Data Breakpoints (ba Command) And Reverse Continuing, So You Can See When A Certain Variable Was Last Changed To Its Current Value. Chromium Specifics: The Type Of Injection The Time Travel Tracer Needs To Perform Is Incompatible With The Chromium Sandbox. In Order To Record A Trace, You'll Need To Run With --no-sandbox. Chromium Cannot Run Elevated With Administrator Privileges, So The "Launch Executable (advance)" Option Won't Work, You'll Need To Attach After The Process Has Already Launched Via The Checkbox In The Bottom Right. If You Need To Record Startup-like Things, You'll Have To Use --{browser,gpu,renderer,utility}-startup-dialog, Then Attach (and Hope The Relevant Code Hasn't Executed Before That Point). JsDbg -- Data Structure Visualization You Can Install JsDbg As A Plugin For WinDbg Or Visual Studio. It Interactively Lets You Look At Data Structures (such As The DOM Tree, Accessibility Tree, Layout Object Tree, And Others) In A Web Browser As You Debug. See The JsDbg Site For Some Screen Shots And Usage Examples. This Also Works When Examining Memory Dumps (though Not Minidumps), And Also Works Together With Time Travel Debugging. Visual Studio Hints Debug Visualizers Chrome's Custom Debug Visualizers Should Be Added To The Pdb Files And Automatically Picked Up By Visual Studio. The Definitions Are In //tools/win/DebugVisualizers If You Need To Modify Them (the BUILD.gn File There Has Additional Instructions). Don't Step Into Trivial Functions The Debugger Can Be Configured To Automatically Not Step Into Functions Based On Regular Expression. Edit Default.natstepfilter In The Following Directory: For Visual Studio 2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers (for The Current User Only) For Visual Studio 2017 Pro: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2017\Visualizers (for The Current User Only) Add Regular Expressions Of Functions To Not Step Into. Remember To Regex-escape And XML-escape Them, E.g. < For < And \. For A Literal Dot. Example: Operator New NoStepInto Operator Delete NoStepInto Std::.* NoStepInto WTF::.*Ptr ::.* NoStepInto This File Is Read At Start Of A Debugging Session (F5), So You Don't Need To Restart Visual Studio After Changing It. More Info: Microsoft Email Thread V8 And Chromium V8 Supports Many Command-line Flags That Are Useful For Debugging. V8 Command-line Flags Can Be Set Via The Chromium Command-line Flag --js-flags; For Instance: Chrome.exe --js-flags="--trace_exception --heap_stats" Note That Some V8 Command-line Flags Exist Only In The Debug Build Of V8. For A List Of All V8 Flags Try: Chrome.exe --js-flags="--help" Graphics Debugging GPU Acceleration Of Rendering Can Be More Easily Debugged With Tools. See: Graphics Debugging In Visual Studio 2013 Graphical Debugging With NVIDIA NSight Debugging On Another Machine Sometimes It's Useful To Debug Installation And Execution On A Machine Other Than Your Primary Build Box. To Run The Installer On Said Other Machine, First Build The Mini_installer Target On Your Main Build Machine (e.g., Autoninja -C Out\Debug Mini_installer). Next, On The Debug Machine: Make The Build Machine's Build Volume Available On The Debug Machine Either By Mounting It Locally (e.g., Z:\) Or By Crafting A UNC Path To It (e.g., \\builder\src) Open Up A Command Prompt And Change To A Local Disk Run Src\tools\win\copy-installer.bat In The Remote Checkout By Way Of The Mount (e.g., Z:\PATHTOCHECKOUT\src\...) Or UNC Path (e.g., \\builder\src\...). This Will Copy The Installer, DLLs, And PDBs Into Your Debug Machine's C:\out Or C:\build (depending On If You're Rocking The Component=shared_library Build Or Not) Run C:\out\Debug\mini_installer.exe With The Flags Of Your Choice To Install Chrome. This Can Take Some Time, Especially On A Slow Machine. Watch The Task Manager And Wait Until Mini_installer.exe Exits Before Trying To Launch Chrome (by Way Of The Shortcut(s) Created By The Installer) For Extra Pleasure, Add C:\out\Debug To Your _NT_SYMBOL_PATH Environment Variable Consider Reading The Documentation At The Top Of Copy-installer.bat To See How You Can Run It. It Tries To Be Smart And Copy The Right Things, But You May Need To Be Explicit (e.g., "copy-installer.bat Out Debug"). It Is Safe To Re-run The Script To Copy Only Modified Files (after A Rebuild, For Example). You Can Also Use The Zip Action Of The Isolate Scripts (tools\mb\mb.py) To Package All The Files For A Target Into A Single Zip File, For Example: Python Tools\mb\mb.py Zip Out/Release Base_unittests Base_unittests.zip Finding All Memory Allocations It Is Possible To Use Heap Snapshots To Get Call Stacks On All Outstanding Allocations That Use The OS Heap. This Works Particularly Well If Heap Snapshots Are Started As Soon As The Chrome Browser Process Is Created, But Before It Starts Running. Details Can Be Found In This Batch File. However, With PartitionAlloc Everywhere Most Chromium Allocations No Longer Use The Windows Heap So This Will Only Find A Subset Of Allocations, Mostly From OS DLLs. Find Memory Leaks Note: As With Heap Snapshots The Utility Of UMDH Is Greatly Reduced Now Because PartitionAlloc Everywhere Has Mostly Replaced The Windows Heap. The Windows Heap Manager Has A Really Useful Debug Flag, Where It Can Be Asked To Capture And Store A Stack Trace With Every Allocation. The Tool To Scrape These Stack Traces Out Of Processes Is UMDH, Which Comes With WinDbg. UMDH Is Great. It Will Capture A Snapshot Of The Heap State As Many Times As You Like, And It'll Do It Fairly Quickly. You Then Run It Again Against Either A Single Snapshot, Or A Pair Of Snapshots, At Which Time It'll Symbolize The Stack Traces And Aggregate Usage Up To Unique Stack Traces. Turning On The User Stack Trace Database For Chrome.exe With Gflags.exe Makes It Run Unbearably Slowly; However, Turning On The User Stack Trace Database On For The Browser Alone Is Just Fine. While It's Possible To Turn On The User Stack Database With The "!gflag" Debugging Extension, It's Too Late To Do This By The Time The Initial Debugger Breakpoint Hits. The Only Reasonable Way To Do This Is To Launch GFlags.exe, Enable The User Stack Trace Database (per Image Below), Launch Chrome Under The Debugger. Set A Breakpont When Chrome.dll Loads With "sxe Ld Chrome.dll". Step Up, To Allow Chrome.dll To Initialize. Disable The Stack Trace Database In GFlags.exe. Continue Chrome, Optionally Detaching The Debugger. Image GFlags.exe Settings For User Mode Stack Trace Database. If You Then Ever Suffer A Browser Memory Leak, You Can Snarf A Dump Of The Process With Umdh -p: > Chrome-browser-leak-umdh-dump.txt Which Can Then Typically Be "trivially" Analyzed To Find The Culprit. Miscellaneous Note That By Default Application Verifier Only Works With Non-official Builds Of Chromium. To Use Application Verifier On Official Builds You Need To Add --disable-features=RendererCodeIntegrity To Avoid Sandbox Crashes In Renderer Processes. See Crbug.com/1004989 For Details. See Also This Page. Application Verifier Is A Free Tool From Microsoft (available As Part Of The Windows SDK) That Can Be Used To Flush Out Programming Errors. Starting With M68 Application Verifier Can Be Enabled For Chrome.exe Without Needing To Disable The Sandbox. After Adding Chrome.exe To The List Of Applications To Be Stressed You Need To Expand The List Of Basics Checks And Disable The Leak Checks. You May Also Need To Disable Handles And Locks Checks Depending On Your Graphics Driver And Specific Chrome Version, But The Eventual Goal Is To Have Chrome Run With Handles And Locks Checks Enabled. When Bugs Are Found Chrome Will Trigger A Breakpoint So Running All Chrome Processes Under A Debugger Is Recommended. Chrome Will Run Much More Slowly Because Application Verifier Puts Every Heap Allocation On A Separate Page. Note That With PartitionAlloc Everywhere Most Chromium Allocations Don't Actually Go Through The Windows Heap And Are Therefore Unaffected By Application Verifier. You Can Check The Undocumented 'Cuzz' Checkbox In Application Verifier To Get The Windows Thread Scheduler To Add Some Extra Randomness In Order To Help Expose Race Conditions In Your Code. To Put A Breakpoint On CreateFile(), Add This Break Point: {,,kernel32.dll}_CreateFileW@28 {,,kernel32.dll} Specifies The DLL (context Operator). _ Prefix Means Extern "C". @28 Postfix Means _stdcall With The Stack Pop At The End Of The Function. I.e. The Number Of Arguments In BYTES. You Can Use DebugView From SysInternals Or Sawbuck To View LOG() Messages That Normally Go To Stderr On POSIX.
The Chromium Projects Home Chromium ChromiumOS Quick links Report bugs Discuss Other sites Chromium Blog Google Chrome Extensions Except as otherwise noted , the content of this page is licensed under a Creative Commons Attribution 2.5 license , and examples are licensed under the BSD License . Privacy Edit this page For Developers > How-Tos > Debugging Chromium on Windows First see get the code for checkout and build instructions. Getting started You can use Visual Studio's built-in debugger or WinDBG to debug Chromium. You don't need to use the IDE to build in order to use the debugger: autoninja is used to build Chromium and most developers invoke it from a command prompt, and then open the IDE for debugging as necessary. To start debugging an already-built executable with Visual Studio just launch Visual Studio (2019 or higher) and select File-> Open-> Project/Solution (Ctrl+Shift+O) and select the executable of interest. This will create a solution with that executable as the 'project'. You can then launch the debugger with F5 or F11 or from the Debug menu. If you right-click on the executable in Solution Explorer and select properties then you can edit things such as the executable path, command-line arguments, and working directory. You can add additional executables to the solution by using File-> Add-> Existing Project and selecting another already-built executable. You can select which one to debug by right-clicking on one of them in Solution Explorer and selecting Set as Startup Project. When your solution file is customized to your taste you can save it to a directory such as out\solutions. Saving it there helps ensure that relative paths to source files, printed from build commands, will correctly identify the source files. The Tools menu can be used to add commands to do things like invoke autoninja to build Chrome, compile the selected source file, or other things. Visual Studio 2017 is not recommended for debugging of Chromium - use a newer version for best performance and stability. symbol_level=2 is the default on Windows and gives full debugging information with types, locals, globals, function names, and source/line information. symbol_level=1 creates smaller PDBs with just function names, and source/line information - source-level debugging is still supported (new from June 2019), but local variables and type information are missing. symbol_level=0 gives extremely limited debugging abilities, mostly just viewing call stacks when Chromium crashes. Browsing source code If you use a solution file generated by gn ( gn gen --ide=vs ) then Intellisense may help you navigate the code. If this doesn't work or if you use a solution created as above then you may want to install VsChromium to help navigate the code, as well as using https://source.chromium.org . Profiles It's a good idea to use a different Chrome profile for your debugging. If you are debugging Google Chrome branded builds, or use a Chromium build as your primary browser, the profiles can collide so you can't run both at once, and your stable browser might see profile versions from the future (Google Chrome and Chromium use different profile directories by default so won't collide). Use the command-line option: --user-data-dir =C:\tmp\my_debug_profile (replace the path as necessary) Using the IDE, go to the Debugging tab of the properties of the chrome project, and set the Command Arguments. Chrome debug log Enable Chrome debug logging to a file by passing --enable-logging --v=1 command-line flags at startup. Debug builds place the chrome_debug.log file in the out\Debug directory. Release builds place the file in the top level of the user data Chromium app directory, which is OS-version-dependent. For more information, see logging and user data directory details. Symbol server If you are debugging official Google Chrome release builds, use the symbol server: https://chromium-browser-symsrv.commondatastorage.googleapis.com In Visual Studio, this goes in Tools > Options under Debugging > Symbols . You should set up a local cache in a empty directory on your computer. In windbg you can add this to your symbol server search path with the command below, where C:\symbols is a local cache directory: .sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Alternately, You can set the _NT_SYMBOL_PATH environment variable to include both the Microsoft and Google symbol servers - VS, windbg, and other tools should both respect this environment variable: _NT_SYMBOL_PATH =SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols ;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Note that symbol servers will let the debuggers download both the PE files (DLLs and EXEs) and the PDB files. Chrome often loads third party libraries and partial symbols for some of these are also public. For example: AMD : https://download.amd.com/dir/bin Nvidia : https://driver-symbols.nvidia.com/ Intel : https://software.intel.com/sites/downloads/symbols/ For example, for completeness, the following symbol server environment variable will resolve all of the above sources - but this is more than is normally needed: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://download.amd.com/dir/bin;SRV\*C:\symbols\*https://driver-symbols.nvidia.com/;SRV\*C:\symbols\*https://software.intel.com/sites/downloads/symbols/ Source indexing You should set up source indexing in your debugger ( .srcfix in windbg, Tools-> Options-> Debugging-> General-> Enable source server support in Visual Studio) so that the correct source files will automatically be downloaded based on information in the downloaded symbols. Additionally, you must have python in your path in order for the command that fetches source files to succeed; launching the debugger from the same environment as where you build Chromium is an easy way to ensure it's present. This is highly recommended when debugging released Google Chrome builds or looking at crash dumps. Having the correct version of the source files automatically show up saves significant time so you should definitely set this. Multi-process issues Chromium can be challenging to debug because of its multi-process architecture . When you select Run in the debugger, only the main browser process will be debugged. The code that actually renders web pages (the Renderer) and the plugins will be in separate processes that's not (yet!) being debugged. The ProcessExplorer tool has a process tree view where you can see how these processes are related. You can also get the process IDs associated with each tab from the Chrome Task Manager (right-click on an empty area of the window title bar to open). Automatically attach to child processes There are two Visual Studio extensions that enable the debugger to automatically attach to all Chrome processes, so you can debug all of Chrome at once. Microsoft's Child Process Debugging Power Tool is a standalone extension for this, and VsChromium is another option that bundles many other additional features. In addition to installing one of these extensions, you must run Visual Studio as Administrator, or it will silently fail to attach to some of Chrome's child processes. Single-process mode One way to debug issues is to run Chromium in single-process mode. This will allow you to see the entire state of the program without extra work (although it will still have many threads). To use single-process mode, add the command-line flag --single-process This approach isn't perfect because some problems won't manifest themselves in this mode and some features don't work and worker threads are still spawned into new processes. Manually attaching to a child process You can attach to the running child processes with the debugger. Select Tools > Attach to Process and click the chrome.exe process you want to attach to. Before attaching, make sure you have selected only Native code when attaching to the process This is done by clicking Select... in the Attach to Process window and only checking Native. If you forget this, it may attempt to attach in "WebKit" mode to debug JavaScript, and you'll get an error message "An operation is not legal in the current state." You can now debug the two processes as if they were one. When you are debugging multiple processes, open the Debug > Windows > Processes window to switch between them. Sometimes you are debugging something that only happens on startup, and want to see the child process as soon as it starts. Use: --renderer-startup-dialog --no-sandbox You have to disable the sandbox or the dialog box will be prohibited from showing. When the dialog appears, visit Tools > Attach to Process and attach to the process showing the Renderer startup dialog. Now you're debugging in the renderer and can continue execution by pressing OK in the dialog. Startup dialogs also exist for other child process types: --gpu-startup-dialog , --ppapi-startup-dialog , --utility-startup-dialog , --plugin-startup-dialog (for NPAPI). For utilities, you can add a service type --utility-startup-dialog=data_decoder.mojom.DataDecoderService . You can also try the vs-chromium plug-in to attach to the right processes. Semi-automatically attaching the debugger to child processes The following flags cause child processes to wait for 60 seconds in a busy loop for a debugger to attach to the process. Once either condition is true, it continues on; no exception is thrown. --wait-for-debugger-children [=filter] The filter, if provided, will fire only if it matches the --type parameter to the process. Values include renderer , plugin (for NPAPI), ppapi , gpu-process , and utility . When using this option, it may be helpful to limit the number of renderer processes spawned, using: --renderer-process-limit = 1 Image File Execution Options Using Image File Execution Options (IFEO) will not work because CreateProcess() returns the handle to the debugger process instead of the intended child process. There are also issues with the sandbox. Time travel debugging You can do time travel debugging using WinDbg Preview (must be installed from the Microsoft Store). This lets you execute a program forward and backwards. After capturing a trace, you can set breakpoints and step through code as normal, but also provides 'backwards' commands (g-, t-, p-) so that you can go back and forth through the execution. It is especially useful to set data breakpoints ( ba command ) and reverse continuing, so you can see when a certain variable was last changed to its current value. Chromium specifics: The type of injection the time travel tracer needs to perform is incompatible with the Chromium sandbox. In order to record a trace, you'll need to run with --no-sandbox . Chromium cannot run elevated with Administrator privileges, so the "Launch executable (advance)" option won't work, you'll need to attach after the process has already launched via the checkbox in the bottom right. If you need to record startup-like things, you'll have to use --{browser,gpu,renderer,utility}-startup-dialog, then attach (and hope the relevant code hasn't executed before that point). JsDbg -- data structure visualization You can install JsDbg as a plugin for WinDbg or Visual Studio . It interactively lets you look at data structures (such as the DOM tree, Accessibility tree, layout object tree, and others) in a web browser as you debug. See the JsDbg site for some screen shots and usage examples. This also works when examining memory dumps (though not minidumps), and also works together with time travel debugging. Visual Studio hints Debug visualizers Chrome's custom debug visualizers should be added to the pdb files and automatically picked up by Visual Studio. The definitions are in //tools/win/DebugVisualizers if you need to modify them (the BUILD.gn file there has additional instructions). Don't step into trivial functions The debugger can be configured to automatically not step into functions based on regular expression. Edit default.natstepfilter in the following directory: For Visual Studio 2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers (for all users) or %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers (for the current user only) For Visual Studio 2017 Pro: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Packages\Debugger\Visualizers (for all users) or %USERPROFILE%\My Documents\Visual Studio 2017\Visualizers (for the current user only) Add regular expressions of functions to not step into. Remember to regex-escape and XML-escape them, e.g. < for < and \. for a literal dot. Example: < Function > < Name > operator new </ Name > < Action > NoStepInto </ Action > </ Function > < Function > < Name > operator delete </ Name > < Action > NoStepInto </ Action > </ Function > <!-- Skip everything in std --> < Function > < Name > std::.* </ Name > < Action > NoStepInto </ Action > </ Function > <!-- all methods on WebKit OwnPtr and variants, ... WTF::*Ptr<*>::* --> < Function > < Name > WTF::.*Ptr<.*>::.* </ Name > < Action > NoStepInto </ Action > </ Function > This file is read at start of a debugging session (F5), so you don't need to restart Visual Studio after changing it. More info: Microsoft email thread V8 and Chromium V8 supports many command-line flags that are useful for debugging. V8 command-line flags can be set via the Chromium command-line flag --js-flags; for instance: chrome.exe --js-flags= "--trace_exception --heap_stats" Note that some V8 command-line flags exist only in the debug build of V8. For a list of all V8 flags try: chrome.exe --js-flags= "--help" Graphics debugging GPU Acceleration of rendering can be more easily debugged with tools. See: Graphics Debugging in Visual Studio 2013 Graphical debugging with NVIDIA NSight Debugging on another machine Sometimes it's useful to debug installation and execution on a machine other than your primary build box. To run the installer on said other machine, first build the mini_installer target on your main build machine (e.g., autoninja -C out\Debug mini_installer). Next, on the debug machine: Make the build machine's build volume available on the debug machine either by mounting it locally (e.g., Z:\) or by crafting a UNC path to it (e.g., \\builder\src) Open up a command prompt and change to a local disk Run src\tools\win\ copy-installer.bat in the remote checkout by way of the mount (e.g., Z:\PATHTOCHECKOUT\src\...) or UNC path (e.g., \\builder\src\...). This will copy the installer, DLLs, and PDBs into your debug machine's C:\out or C:\build (depending on if you're rocking the component=shared_library build or not) Run C:\out\Debug\mini_installer.exe with the flags of your choice to install Chrome. This can take some time, especially on a slow machine. Watch the Task Manager and wait until mini_installer.exe exits before trying to launch Chrome (by way of the shortcut(s) created by the installer) For extra pleasure, add C:\out\Debug to your _NT_SYMBOL_PATH environment variable Consider reading the documentation at the top of copy-installer.bat to see how you can run it. It tries to be smart and copy the right things, but you may need to be explicit (e.g., "copy-installer.bat out Debug"). It is safe to re-run the script to copy only modified files (after a rebuild, for example). You can also use the zip action of the isolate scripts (tools\mb\mb.py) to package all the files for a target into a single zip file, for example: python tools\mb\mb.py zip out/Release base_unittests base_unittests. zip Finding all memory allocations It is possible to use Heap Snapshots to get call stacks on all outstanding allocations that use the OS heap. This works particularly well if heap snapshots are started as soon as the Chrome browser process is created, but before it starts running. Details can be found in this batch file . However, with PartitionAlloc Everywhere most Chromium allocations no longer use the Windows heap so this will only find a subset of allocations, mostly from OS DLLs. Find memory leaks Note: as with Heap Snapshots the utility of UMDH is greatly reduced now because PartitionAlloc Everywhere has mostly replaced the Windows heap. The Windows heap manager has a really useful debug flag, where it can be asked to capture and store a stack trace with every allocation. The tool to scrape these stack traces out of processes is UMDH, which comes with WinDbg . UMDH is great. It will capture a snapshot of the heap state as many times as you like, and it'll do it fairly quickly. You then run it again against either a single snapshot, or a pair of snapshots, at which time it'll symbolize the stack traces and aggregate usage up to unique stack traces. Turning on the user stack trace database for chrome.exe with gflags.exe makes it run unbearably slowly; however, turning on the user stack trace database on for the browser alone is just fine. While it's possible to turn on the user stack database with the "!gflag" debugging extension, it's too late to do this by the time the initial debugger breakpoint hits. The only reasonable way to do this is to Launch GFlags.exe, Enable the user stack trace database (per image below), Launch Chrome under the debugger. Set a breakpont when chrome.dll loads with "sxe ld chrome.dll". Step up, to allow Chrome.dll to initialize. Disable the stack trace database in GFlags.exe. Continue chrome, optionally detaching the debugger. GFlags.exe settings for user mode stack trace database. If you then ever suffer a browser memory leak, you can snarf a dump of the process with umdh - p :<my browser pid> > chrome-browser-leak-umdh-dump.txt which can then typically be "trivially" analyzed to find the culprit. Miscellaneous Note that by default Application Verifier only works with non-official builds of Chromium. To use Application Verifier on official builds you need to add --disable-features=RendererCodeIntegrity to avoid sandbox crashes in renderer processes. See crbug.com/1004989 for details. See also this page . Application Verifier is a free tool from Microsoft (available as part of the Windows SDK) that can be used to flush out programming errors. Starting with M68 Application Verifier can be enabled for chrome.exe without needing to disable the sandbox. After adding chrome.exe to the list of applications to be stressed you need to expand the list of Basics checks and disable the Leak checks. You may also need to disable Handles and Locks checks depending on your graphics driver and specific Chrome version, but the eventual goal is to have Chrome run with Handles and Locks checks enabled. When bugs are found Chrome will trigger a breakpoint so running all Chrome processes under a debugger is recommended. Chrome will run much more slowly because Application Verifier puts every heap allocation on a separate page. Note that with PartitionAlloc Everywhere most Chromium allocations don't actually go through the Windows heap and are therefore unaffected by Application Verifier. You can check the undocumented 'Cuzz' checkbox in Application Verifier to get the Windows thread scheduler to add some extra randomness in order to help expose race conditions in your code. To put a breakpoint on CreateFile(), add this break point: {,,kernel32.dll}_CreateFileW@28 {,,kernel32.dll} specifies the DLL (context operator). _ prefix means extern "C". @28 postfix means _stdcall with the stack pop at the end of the function. i.e. the number of arguments in BYTES. You can use DebugView from SysInternals or sawbuck to view LOG() messages that normally go to stderr on POSIX.
“The Chromium Logo The Chromium Projects Home Chromium ChromiumOS Quick Links Report Bugs Discuss Other Sites Chromium Blog Google Chrome Extensions Except As Otherwise Noted, The Content Of This Page Is Licensed Under A Creative Commons Attribution 2.5 License, And Examples Are Licensed Under The BSD License. Privacy Edit This Page For Developers > How-Tos > Debugging Chromium On Windows First See Get The Code For Checkout And Build Instructions. Getting Started You Can Use Visual Studio's Built-in Debugger Or WinDBG To Debug Chromium. You Don't Need To Use The IDE To Build In Order To Use The Debugger: Autoninja Is Used To Build Chromium And Most Developers Invoke It From A Command Prompt, And Then Open The IDE For Debugging As Necessary. To Start Debugging An Already-built Executable With Visual Studio Just Launch Visual Studio (2019 Or Higher) And Select File-> Open-> Project/Solution (Ctrl+Shift+O) And Select The Executable Of Interest. This Will Create A Solution With That Executable As The 'project'. You Can Then Launch The Debugger With F5 Or F11 Or From The Debug Menu. If You Right-click On The Executable In Solution Explorer And Select Properties Then You Can Edit Things Such As The Executable Path, Command-line Arguments, And Working Directory. You Can Add Additional Executables To The Solution By Using File-> Add-> Existing Project And Selecting Another Already-built Executable. You Can Select Which One To Debug By Right-clicking On One Of Them In Solution Explorer And Selecting Set As Startup Project. When Your Solution File Is Customized To Your Taste You Can Save It To A Directory Such As Out\solutions. Saving It There Helps Ensure That Relative Paths To Source Files, Printed From Build Commands, Will Correctly Identify The Source Files. The Tools Menu Can Be Used To Add Commands To Do Things Like Invoke Autoninja To Build Chrome, Compile The Selected Source File, Or Other Things. Visual Studio 2017 Is Not Recommended For Debugging Of Chromium - Use A Newer Version For Best Performance And Stability. Symbol_level=2 Is The Default On Windows And Gives Full Debugging Information With Types, Locals, Globals, Function Names, And Source/line Information. Symbol_level=1 Creates Smaller PDBs With Just Function Names, And Source/line Information - Source-level Debugging Is Still Supported (new From June 2019), But Local Variables And Type Information Are Missing. Symbol_level=0 Gives Extremely Limited Debugging Abilities, Mostly Just Viewing Call Stacks When Chromium Crashes. Browsing Source Code If You Use A Solution File Generated By Gn (gn Gen --ide=vs) Then Intellisense May Help You Navigate The Code. If This Doesn't Work Or If You Use A Solution Created As Above Then You May Want To Install VsChromium To Help Navigate The Code, As Well As Using Https://source.chromium.org. Profiles It's A Good Idea To Use A Different Chrome Profile For Your Debugging. If You Are Debugging Google Chrome Branded Builds, Or Use A Chromium Build As Your Primary Browser, The Profiles Can Collide So You Can't Run Both At Once, And Your Stable Browser Might See Profile Versions From The Future (Google Chrome And Chromium Use Different Profile Directories By Default So Won't Collide). Use The Command-line Option: --user-data-dir=C:\tmp\my_debug_profile (replace The Path As Necessary) Using The IDE, Go To The Debugging Tab Of The Properties Of The Chrome Project, And Set The Command Arguments. Chrome Debug Log Enable Chrome Debug Logging To A File By Passing --enable-logging --v=1 Command-line Flags At Startup. Debug Builds Place The Chrome_debug.log File In The Out\Debug Directory. Release Builds Place The File In The Top Level Of The User Data Chromium App Directory, Which Is OS-version-dependent. For More Information, See Logging And User Data Directory Details. Symbol Server If You Are Debugging Official Google Chrome Release Builds, Use The Symbol Server: Https://chromium-browser-symsrv.commondatastorage.googleapis.com In Visual Studio, This Goes In Tools > Options Under Debugging > Symbols. You Should Set Up A Local Cache In A Empty Directory On Your Computer. In Windbg You Can Add This To Your Symbol Server Search Path With The Command Below, Where C:\symbols Is A Local Cache Directory: .sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Alternately, You Can Set The _NT_SYMBOL_PATH Environment Variable To Include Both The Microsoft And Google Symbol Servers - VS, Windbg, And Other Tools Should Both Respect This Environment Variable: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Note That Symbol Servers Will Let The Debuggers Download Both The PE Files (DLLs And EXEs) And The PDB Files. Chrome Often Loads Third Party Libraries And Partial Symbols For Some Of These Are Also Public. For Example: AMD: Https://download.amd.com/dir/bin Nvidia: Https://driver-symbols.nvidia.com/ Intel: Https://software.intel.com/sites/downloads/symbols/ For Example, For Completeness, The Following Symbol Server Environment Variable Will Resolve All Of The Above Sources - But This Is More Than Is Normally Needed: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://download.amd.com/dir/bin;SRV\*C:\symbols\*https://driver-symbols.nvidia.com/;SRV\*C:\symbols\*https://software.intel.com/sites/downloads/symbols/ Source Indexing You Should Set Up Source Indexing In Your Debugger (.srcfix In Windbg, Tools-> Options-> Debugging-> General-> Enable Source Server Support In Visual Studio) So That The Correct Source Files Will Automatically Be Downloaded Based On Information In The Downloaded Symbols. Additionally, You Must Have Python In Your Path In Order For The Command That Fetches Source Files To Succeed; Launching The Debugger From The Same Environment As Where You Build Chromium Is An Easy Way To Ensure It's Present. This Is Highly Recommended When Debugging Released Google Chrome Builds Or Looking At Crash Dumps. Having The Correct Version Of The Source Files Automatically Show Up Saves Significant Time So You Should Definitely Set This. Multi-process Issues Chromium Can Be Challenging To Debug Because Of Its Multi-process Architecture. When You Select Run In The Debugger, Only The Main Browser Process Will Be Debugged. The Code That Actually Renders Web Pages (the Renderer) And The Plugins Will Be In Separate Processes That's Not (yet!) Being Debugged. The ProcessExplorer Tool Has A Process Tree View Where You Can See How These Processes Are Related. You Can Also Get The Process IDs Associated With Each Tab From The Chrome Task Manager (right-click On An Empty Area Of The Window Title Bar To Open). Automatically Attach To Child Processes There Are Two Visual Studio Extensions That Enable The Debugger To Automatically Attach To All Chrome Processes, So You Can Debug All Of Chrome At Once. Microsoft's Child Process Debugging Power Tool Is A Standalone Extension For This, And VsChromium Is Another Option That Bundles Many Other Additional Features. In Addition To Installing One Of These Extensions, You Must Run Visual Studio As Administrator, Or It Will Silently Fail To Attach To Some Of Chrome's Child Processes. Single-process Mode One Way To Debug Issues Is To Run Chromium In Single-process Mode. This Will Allow You To See The Entire State Of The Program Without Extra Work (although It Will Still Have Many Threads). To Use Single-process Mode, Add The Command-line Flag --single-process This Approach Isn't Perfect Because Some Problems Won't Manifest Themselves In This Mode And Some Features Don't Work And Worker Threads Are Still Spawned Into New Processes. Manually Attaching To A Child Process You Can Attach To The Running Child Processes With The Debugger. Select Tools > Attach To Process And Click The Chrome.exe Process You Want To Attach To. Before Attaching, Make Sure You Have Selected Only Native Code When Attaching To The Process This Is Done By Clicking Select... In The Attach To Process Window And Only Checking Native. If You Forget This, It May Attempt To Attach In "WebKit" Mode To Debug JavaScript, And You'll Get An Error Message "An Operation Is Not Legal In The Current State." You Can Now Debug The Two Processes As If They Were One. When You Are Debugging Multiple Processes, Open The Debug > Windows > Processes Window To Switch Between Them. Sometimes You Are Debugging Something That Only Happens On Startup, And Want To See The Child Process As Soon As It Starts. Use: --renderer-startup-dialog --no-sandbox You Have To Disable The Sandbox Or The Dialog Box Will Be Prohibited From Showing. When The Dialog Appears, Visit Tools > Attach To Process And Attach To The Process Showing The Renderer Startup Dialog. Now You're Debugging In The Renderer And Can Continue Execution By Pressing OK In The Dialog. Startup Dialogs Also Exist For Other Child Process Types: --gpu-startup-dialog, --ppapi-startup-dialog, --utility-startup-dialog, --plugin-startup-dialog (for NPAPI). For Utilities, You Can Add A Service Type --utility-startup-dialog=data_decoder.mojom.DataDecoderService. You Can Also Try The Vs-chromium Plug-in To Attach To The Right Processes. Semi-automatically Attaching The Debugger To Child Processes The Following Flags Cause Child Processes To Wait For 60 Seconds In A Busy Loop For A Debugger To Attach To The Process. Once Either Condition Is True, It Continues On; No Exception Is Thrown. --wait-for-debugger-children[=filter] The Filter, If Provided, Will Fire Only If It Matches The --type Parameter To The Process. Values Include Renderer, Plugin (for NPAPI), Ppapi, Gpu-process, And Utility. When Using This Option, It May Be Helpful To Limit The Number Of Renderer Processes Spawned, Using: --renderer-process-limit=1 Image File Execution Options Using Image File Execution Options (IFEO) Will Not Work Because CreateProcess() Returns The Handle To The Debugger Process Instead Of The Intended Child Process. There Are Also Issues With The Sandbox. Time Travel Debugging You Can Do Time Travel Debugging Using WinDbg Preview (must Be Installed From The Microsoft Store). This Lets You Execute A Program Forward And Backwards. After Capturing A Trace, You Can Set Breakpoints And Step Through Code As Normal, But Also Provides 'backwards' Commands (g-, T-, P-) So That You Can Go Back And Forth Through The Execution. It Is Especially Useful To Set Data Breakpoints (ba Command) And Reverse Continuing, So You Can See When A Certain Variable Was Last Changed To Its Current Value. Chromium Specifics: The Type Of Injection The Time Travel Tracer Needs To Perform Is Incompatible With The Chromium Sandbox. In Order To Record A Trace, You'll Need To Run With --no-sandbox. Chromium Cannot Run Elevated With Administrator Privileges, So The "Launch Executable (advance)" Option Won't Work, You'll Need To Attach After The Process Has Already Launched Via The Checkbox In The Bottom Right. If You Need To Record Startup-like Things, You'll Have To Use --{browser,gpu,renderer,utility}-startup-dialog, Then Attach (and Hope The Relevant Code Hasn't Executed Before That Point). JsDbg -- Data Structure Visualization You Can Install JsDbg As A Plugin For WinDbg Or Visual Studio. It Interactively Lets You Look At Data Structures (such As The DOM Tree, Accessibility Tree, Layout Object Tree, And Others) In A Web Browser As You Debug. See The JsDbg Site For Some Screen Shots And Usage Examples. This Also Works When Examining Memory Dumps (though Not Minidumps), And Also Works Together With Time Travel Debugging. Visual Studio Hints Debug Visualizers Chrome's Custom Debug Visualizers Should Be Added To The Pdb Files And Automatically Picked Up By Visual Studio. The Definitions Are In //tools/win/DebugVisualizers If You Need To Modify Them (the BUILD.gn File There Has Additional Instructions). Don't Step Into Trivial Functions The Debugger Can Be Configured To Automatically Not Step Into Functions Based On Regular Expression. Edit Default.natstepfilter In The Following Directory: For Visual Studio 2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers (for The Current User Only) For Visual Studio 2017 Pro: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2017\Visualizers (for The Current User Only) Add Regular Expressions Of Functions To Not Step Into. Remember To Regex-escape And XML-escape Them, E.g. < For < And \. For A Literal Dot. Example: Operator New NoStepInto Operator Delete NoStepInto Std::.* NoStepInto WTF::.*Ptr ::.* NoStepInto This File Is Read At Start Of A Debugging Session (F5), So You Don't Need To Restart Visual Studio After Changing It. More Info: Microsoft Email Thread V8 And Chromium V8 Supports Many Command-line Flags That Are Useful For Debugging. V8 Command-line Flags Can Be Set Via The Chromium Command-line Flag --js-flags; For Instance: Chrome.exe --js-flags="--trace_exception --heap_stats" Note That Some V8 Command-line Flags Exist Only In The Debug Build Of V8. For A List Of All V8 Flags Try: Chrome.exe --js-flags="--help" Graphics Debugging GPU Acceleration Of Rendering Can Be More Easily Debugged With Tools. See: Graphics Debugging In Visual Studio 2013 Graphical Debugging With NVIDIA NSight Debugging On Another Machine Sometimes It's Useful To Debug Installation And Execution On A Machine Other Than Your Primary Build Box. To Run The Installer On Said Other Machine, First Build The Mini_installer Target On Your Main Build Machine (e.g., Autoninja -C Out\Debug Mini_installer). Next, On The Debug Machine: Make The Build Machine's Build Volume Available On The Debug Machine Either By Mounting It Locally (e.g., Z:\) Or By Crafting A UNC Path To It (e.g., \\builder\src) Open Up A Command Prompt And Change To A Local Disk Run Src\tools\win\copy-installer.bat In The Remote Checkout By Way Of The Mount (e.g., Z:\PATHTOCHECKOUT\src\...) Or UNC Path (e.g., \\builder\src\...). This Will Copy The Installer, DLLs, And PDBs Into Your Debug Machine's C:\out Or C:\build (depending On If You're Rocking The Component=shared_library Build Or Not) Run C:\out\Debug\mini_installer.exe With The Flags Of Your Choice To Install Chrome. This Can Take Some Time, Especially On A Slow Machine. Watch The Task Manager And Wait Until Mini_installer.exe Exits Before Trying To Launch Chrome (by Way Of The Shortcut(s) Created By The Installer) For Extra Pleasure, Add C:\out\Debug To Your _NT_SYMBOL_PATH Environment Variable Consider Reading The Documentation At The Top Of Copy-installer.bat To See How You Can Run It. It Tries To Be Smart And Copy The Right Things, But You May Need To Be Explicit (e.g., "copy-installer.bat Out Debug"). It Is Safe To Re-run The Script To Copy Only Modified Files (after A Rebuild, For Example). You Can Also Use The Zip Action Of The Isolate Scripts (tools\mb\mb.py) To Package All The Files For A Target Into A Single Zip File, For Example: Python Tools\mb\mb.py Zip Out/Release Base_unittests Base_unittests.zip Finding All Memory Allocations It Is Possible To Use Heap Snapshots To Get Call Stacks On All Outstanding Allocations That Use The OS Heap. This Works Particularly Well If Heap Snapshots Are Started As Soon As The Chrome Browser Process Is Created, But Before It Starts Running. Details Can Be Found In This Batch File. However, With PartitionAlloc Everywhere Most Chromium Allocations No Longer Use The Windows Heap So This Will Only Find A Subset Of Allocations, Mostly From OS DLLs. Find Memory Leaks Note: As With Heap Snapshots The Utility Of UMDH Is Greatly Reduced Now Because PartitionAlloc Everywhere Has Mostly Replaced The Windows Heap. The Windows Heap Manager Has A Really Useful Debug Flag, Where It Can Be Asked To Capture And Store A Stack Trace With Every Allocation. The Tool To Scrape These Stack Traces Out Of Processes Is UMDH, Which Comes With WinDbg. UMDH Is Great. It Will Capture A Snapshot Of The Heap State As Many Times As You Like, And It'll Do It Fairly Quickly. You Then Run It Again Against Either A Single Snapshot, Or A Pair Of Snapshots, At Which Time It'll Symbolize The Stack Traces And Aggregate Usage Up To Unique Stack Traces. Turning On The User Stack Trace Database For Chrome.exe With Gflags.exe Makes It Run Unbearably Slowly; However, Turning On The User Stack Trace Database On For The Browser Alone Is Just Fine. While It's Possible To Turn On The User Stack Database With The "!gflag" Debugging Extension, It's Too Late To Do This By The Time The Initial Debugger Breakpoint Hits. The Only Reasonable Way To Do This Is To Launch GFlags.exe, Enable The User Stack Trace Database (per Image Below), Launch Chrome Under The Debugger. Set A Breakpont When Chrome.dll Loads With "sxe Ld Chrome.dll". Step Up, To Allow Chrome.dll To Initialize. Disable The Stack Trace Database In GFlags.exe. Continue Chrome, Optionally Detaching The Debugger. Image GFlags.exe Settings For User Mode Stack Trace Database. If You Then Ever Suffer A Browser Memory Leak, You Can Snarf A Dump Of The Process With Umdh -p: > Chrome-browser-leak-umdh-dump.txt Which Can Then Typically Be "trivially" Analyzed To Find The Culprit. Miscellaneous Note That By Default Application Verifier Only Works With Non-official Builds Of Chromium. To Use Application Verifier On Official Builds You Need To Add --disable-features=RendererCodeIntegrity To Avoid Sandbox Crashes In Renderer Processes. See Crbug.com/1004989 For Details. See Also This Page. Application Verifier Is A Free Tool From Microsoft (available As Part Of The Windows SDK) That Can Be Used To Flush Out Programming Errors. Starting With M68 Application Verifier Can Be Enabled For Chrome.exe Without Needing To Disable The Sandbox. After Adding Chrome.exe To The List Of Applications To Be Stressed You Need To Expand The List Of Basics Checks And Disable The Leak Checks. You May Also Need To Disable Handles And Locks Checks Depending On Your Graphics Driver And Specific Chrome Version, But The Eventual Goal Is To Have Chrome Run With Handles And Locks Checks Enabled. When Bugs Are Found Chrome Will Trigger A Breakpoint So Running All Chrome Processes Under A Debugger Is Recommended. Chrome Will Run Much More Slowly Because Application Verifier Puts Every Heap Allocation On A Separate Page. Note That With PartitionAlloc Everywhere Most Chromium Allocations Don't Actually Go Through The Windows Heap And Are Therefore Unaffected By Application Verifier. You Can Check The Undocumented 'Cuzz' Checkbox In Application Verifier To Get The Windows Thread Scheduler To Add Some Extra Randomness In Order To Help Expose Race Conditions In Your Code. To Put A Breakpoint On CreateFile(), Add This Break Point: {,,kernel32.dll}_CreateFileW@28 {,,kernel32.dll} Specifies The DLL (context Operator). _ Prefix Means Extern "C". @28 Postfix Means _stdcall With The Stack Pop At The End Of The Function. I.e. The Number Of Arguments In BYTES. You Can Use DebugView From SysInternals Or Sawbuck To View LOG() Messages That Normally Go To Stderr On POSIX.” Metadata:
- Title: ➤ The Chromium Logo The Chromium Projects Home Chromium ChromiumOS Quick Links Report Bugs Discuss Other Sites Chromium Blog Google Chrome Extensions Except As Otherwise Noted, The Content Of This Page Is Licensed Under A Creative Commons Attribution 2.5 License, And Examples Are Licensed Under The BSD License. Privacy Edit This Page For Developers > How-Tos > Debugging Chromium On Windows First See Get The Code For Checkout And Build Instructions. Getting Started You Can Use Visual Studio's Built-in Debugger Or WinDBG To Debug Chromium. You Don't Need To Use The IDE To Build In Order To Use The Debugger: Autoninja Is Used To Build Chromium And Most Developers Invoke It From A Command Prompt, And Then Open The IDE For Debugging As Necessary. To Start Debugging An Already-built Executable With Visual Studio Just Launch Visual Studio (2019 Or Higher) And Select File-> Open-> Project/Solution (Ctrl+Shift+O) And Select The Executable Of Interest. This Will Create A Solution With That Executable As The 'project'. You Can Then Launch The Debugger With F5 Or F11 Or From The Debug Menu. If You Right-click On The Executable In Solution Explorer And Select Properties Then You Can Edit Things Such As The Executable Path, Command-line Arguments, And Working Directory. You Can Add Additional Executables To The Solution By Using File-> Add-> Existing Project And Selecting Another Already-built Executable. You Can Select Which One To Debug By Right-clicking On One Of Them In Solution Explorer And Selecting Set As Startup Project. When Your Solution File Is Customized To Your Taste You Can Save It To A Directory Such As Out\solutions. Saving It There Helps Ensure That Relative Paths To Source Files, Printed From Build Commands, Will Correctly Identify The Source Files. The Tools Menu Can Be Used To Add Commands To Do Things Like Invoke Autoninja To Build Chrome, Compile The Selected Source File, Or Other Things. Visual Studio 2017 Is Not Recommended For Debugging Of Chromium - Use A Newer Version For Best Performance And Stability. Symbol_level=2 Is The Default On Windows And Gives Full Debugging Information With Types, Locals, Globals, Function Names, And Source/line Information. Symbol_level=1 Creates Smaller PDBs With Just Function Names, And Source/line Information - Source-level Debugging Is Still Supported (new From June 2019), But Local Variables And Type Information Are Missing. Symbol_level=0 Gives Extremely Limited Debugging Abilities, Mostly Just Viewing Call Stacks When Chromium Crashes. Browsing Source Code If You Use A Solution File Generated By Gn (gn Gen --ide=vs) Then Intellisense May Help You Navigate The Code. If This Doesn't Work Or If You Use A Solution Created As Above Then You May Want To Install VsChromium To Help Navigate The Code, As Well As Using Https://source.chromium.org. Profiles It's A Good Idea To Use A Different Chrome Profile For Your Debugging. If You Are Debugging Google Chrome Branded Builds, Or Use A Chromium Build As Your Primary Browser, The Profiles Can Collide So You Can't Run Both At Once, And Your Stable Browser Might See Profile Versions From The Future (Google Chrome And Chromium Use Different Profile Directories By Default So Won't Collide). Use The Command-line Option: --user-data-dir=C:\tmp\my_debug_profile (replace The Path As Necessary) Using The IDE, Go To The Debugging Tab Of The Properties Of The Chrome Project, And Set The Command Arguments. Chrome Debug Log Enable Chrome Debug Logging To A File By Passing --enable-logging --v=1 Command-line Flags At Startup. Debug Builds Place The Chrome_debug.log File In The Out\Debug Directory. Release Builds Place The File In The Top Level Of The User Data Chromium App Directory, Which Is OS-version-dependent. For More Information, See Logging And User Data Directory Details. Symbol Server If You Are Debugging Official Google Chrome Release Builds, Use The Symbol Server: Https://chromium-browser-symsrv.commondatastorage.googleapis.com In Visual Studio, This Goes In Tools > Options Under Debugging > Symbols. You Should Set Up A Local Cache In A Empty Directory On Your Computer. In Windbg You Can Add This To Your Symbol Server Search Path With The Command Below, Where C:\symbols Is A Local Cache Directory: .sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Alternately, You Can Set The _NT_SYMBOL_PATH Environment Variable To Include Both The Microsoft And Google Symbol Servers - VS, Windbg, And Other Tools Should Both Respect This Environment Variable: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Note That Symbol Servers Will Let The Debuggers Download Both The PE Files (DLLs And EXEs) And The PDB Files. Chrome Often Loads Third Party Libraries And Partial Symbols For Some Of These Are Also Public. For Example: AMD: Https://download.amd.com/dir/bin Nvidia: Https://driver-symbols.nvidia.com/ Intel: Https://software.intel.com/sites/downloads/symbols/ For Example, For Completeness, The Following Symbol Server Environment Variable Will Resolve All Of The Above Sources - But This Is More Than Is Normally Needed: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://download.amd.com/dir/bin;SRV\*C:\symbols\*https://driver-symbols.nvidia.com/;SRV\*C:\symbols\*https://software.intel.com/sites/downloads/symbols/ Source Indexing You Should Set Up Source Indexing In Your Debugger (.srcfix In Windbg, Tools-> Options-> Debugging-> General-> Enable Source Server Support In Visual Studio) So That The Correct Source Files Will Automatically Be Downloaded Based On Information In The Downloaded Symbols. Additionally, You Must Have Python In Your Path In Order For The Command That Fetches Source Files To Succeed; Launching The Debugger From The Same Environment As Where You Build Chromium Is An Easy Way To Ensure It's Present. This Is Highly Recommended When Debugging Released Google Chrome Builds Or Looking At Crash Dumps. Having The Correct Version Of The Source Files Automatically Show Up Saves Significant Time So You Should Definitely Set This. Multi-process Issues Chromium Can Be Challenging To Debug Because Of Its Multi-process Architecture. When You Select Run In The Debugger, Only The Main Browser Process Will Be Debugged. The Code That Actually Renders Web Pages (the Renderer) And The Plugins Will Be In Separate Processes That's Not (yet!) Being Debugged. The ProcessExplorer Tool Has A Process Tree View Where You Can See How These Processes Are Related. You Can Also Get The Process IDs Associated With Each Tab From The Chrome Task Manager (right-click On An Empty Area Of The Window Title Bar To Open). Automatically Attach To Child Processes There Are Two Visual Studio Extensions That Enable The Debugger To Automatically Attach To All Chrome Processes, So You Can Debug All Of Chrome At Once. Microsoft's Child Process Debugging Power Tool Is A Standalone Extension For This, And VsChromium Is Another Option That Bundles Many Other Additional Features. In Addition To Installing One Of These Extensions, You Must Run Visual Studio As Administrator, Or It Will Silently Fail To Attach To Some Of Chrome's Child Processes. Single-process Mode One Way To Debug Issues Is To Run Chromium In Single-process Mode. This Will Allow You To See The Entire State Of The Program Without Extra Work (although It Will Still Have Many Threads). To Use Single-process Mode, Add The Command-line Flag --single-process This Approach Isn't Perfect Because Some Problems Won't Manifest Themselves In This Mode And Some Features Don't Work And Worker Threads Are Still Spawned Into New Processes. Manually Attaching To A Child Process You Can Attach To The Running Child Processes With The Debugger. Select Tools > Attach To Process And Click The Chrome.exe Process You Want To Attach To. Before Attaching, Make Sure You Have Selected Only Native Code When Attaching To The Process This Is Done By Clicking Select... In The Attach To Process Window And Only Checking Native. If You Forget This, It May Attempt To Attach In "WebKit" Mode To Debug JavaScript, And You'll Get An Error Message "An Operation Is Not Legal In The Current State." You Can Now Debug The Two Processes As If They Were One. When You Are Debugging Multiple Processes, Open The Debug > Windows > Processes Window To Switch Between Them. Sometimes You Are Debugging Something That Only Happens On Startup, And Want To See The Child Process As Soon As It Starts. Use: --renderer-startup-dialog --no-sandbox You Have To Disable The Sandbox Or The Dialog Box Will Be Prohibited From Showing. When The Dialog Appears, Visit Tools > Attach To Process And Attach To The Process Showing The Renderer Startup Dialog. Now You're Debugging In The Renderer And Can Continue Execution By Pressing OK In The Dialog. Startup Dialogs Also Exist For Other Child Process Types: --gpu-startup-dialog, --ppapi-startup-dialog, --utility-startup-dialog, --plugin-startup-dialog (for NPAPI). For Utilities, You Can Add A Service Type --utility-startup-dialog=data_decoder.mojom.DataDecoderService. You Can Also Try The Vs-chromium Plug-in To Attach To The Right Processes. Semi-automatically Attaching The Debugger To Child Processes The Following Flags Cause Child Processes To Wait For 60 Seconds In A Busy Loop For A Debugger To Attach To The Process. Once Either Condition Is True, It Continues On; No Exception Is Thrown. --wait-for-debugger-children[=filter] The Filter, If Provided, Will Fire Only If It Matches The --type Parameter To The Process. Values Include Renderer, Plugin (for NPAPI), Ppapi, Gpu-process, And Utility. When Using This Option, It May Be Helpful To Limit The Number Of Renderer Processes Spawned, Using: --renderer-process-limit=1 Image File Execution Options Using Image File Execution Options (IFEO) Will Not Work Because CreateProcess() Returns The Handle To The Debugger Process Instead Of The Intended Child Process. There Are Also Issues With The Sandbox. Time Travel Debugging You Can Do Time Travel Debugging Using WinDbg Preview (must Be Installed From The Microsoft Store). This Lets You Execute A Program Forward And Backwards. After Capturing A Trace, You Can Set Breakpoints And Step Through Code As Normal, But Also Provides 'backwards' Commands (g-, T-, P-) So That You Can Go Back And Forth Through The Execution. It Is Especially Useful To Set Data Breakpoints (ba Command) And Reverse Continuing, So You Can See When A Certain Variable Was Last Changed To Its Current Value. Chromium Specifics: The Type Of Injection The Time Travel Tracer Needs To Perform Is Incompatible With The Chromium Sandbox. In Order To Record A Trace, You'll Need To Run With --no-sandbox. Chromium Cannot Run Elevated With Administrator Privileges, So The "Launch Executable (advance)" Option Won't Work, You'll Need To Attach After The Process Has Already Launched Via The Checkbox In The Bottom Right. If You Need To Record Startup-like Things, You'll Have To Use --{browser,gpu,renderer,utility}-startup-dialog, Then Attach (and Hope The Relevant Code Hasn't Executed Before That Point). JsDbg -- Data Structure Visualization You Can Install JsDbg As A Plugin For WinDbg Or Visual Studio. It Interactively Lets You Look At Data Structures (such As The DOM Tree, Accessibility Tree, Layout Object Tree, And Others) In A Web Browser As You Debug. See The JsDbg Site For Some Screen Shots And Usage Examples. This Also Works When Examining Memory Dumps (though Not Minidumps), And Also Works Together With Time Travel Debugging. Visual Studio Hints Debug Visualizers Chrome's Custom Debug Visualizers Should Be Added To The Pdb Files And Automatically Picked Up By Visual Studio. The Definitions Are In //tools/win/DebugVisualizers If You Need To Modify Them (the BUILD.gn File There Has Additional Instructions). Don't Step Into Trivial Functions The Debugger Can Be Configured To Automatically Not Step Into Functions Based On Regular Expression. Edit Default.natstepfilter In The Following Directory: For Visual Studio 2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers (for The Current User Only) For Visual Studio 2017 Pro: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2017\Visualizers (for The Current User Only) Add Regular Expressions Of Functions To Not Step Into. Remember To Regex-escape And XML-escape Them, E.g. < For < And \. For A Literal Dot. Example: Operator New NoStepInto Operator Delete NoStepInto Std::.* NoStepInto WTF::.*Ptr ::.* NoStepInto This File Is Read At Start Of A Debugging Session (F5), So You Don't Need To Restart Visual Studio After Changing It. More Info: Microsoft Email Thread V8 And Chromium V8 Supports Many Command-line Flags That Are Useful For Debugging. V8 Command-line Flags Can Be Set Via The Chromium Command-line Flag --js-flags; For Instance: Chrome.exe --js-flags="--trace_exception --heap_stats" Note That Some V8 Command-line Flags Exist Only In The Debug Build Of V8. For A List Of All V8 Flags Try: Chrome.exe --js-flags="--help" Graphics Debugging GPU Acceleration Of Rendering Can Be More Easily Debugged With Tools. See: Graphics Debugging In Visual Studio 2013 Graphical Debugging With NVIDIA NSight Debugging On Another Machine Sometimes It's Useful To Debug Installation And Execution On A Machine Other Than Your Primary Build Box. To Run The Installer On Said Other Machine, First Build The Mini_installer Target On Your Main Build Machine (e.g., Autoninja -C Out\Debug Mini_installer). Next, On The Debug Machine: Make The Build Machine's Build Volume Available On The Debug Machine Either By Mounting It Locally (e.g., Z:\) Or By Crafting A UNC Path To It (e.g., \\builder\src) Open Up A Command Prompt And Change To A Local Disk Run Src\tools\win\copy-installer.bat In The Remote Checkout By Way Of The Mount (e.g., Z:\PATHTOCHECKOUT\src\...) Or UNC Path (e.g., \\builder\src\...). This Will Copy The Installer, DLLs, And PDBs Into Your Debug Machine's C:\out Or C:\build (depending On If You're Rocking The Component=shared_library Build Or Not) Run C:\out\Debug\mini_installer.exe With The Flags Of Your Choice To Install Chrome. This Can Take Some Time, Especially On A Slow Machine. Watch The Task Manager And Wait Until Mini_installer.exe Exits Before Trying To Launch Chrome (by Way Of The Shortcut(s) Created By The Installer) For Extra Pleasure, Add C:\out\Debug To Your _NT_SYMBOL_PATH Environment Variable Consider Reading The Documentation At The Top Of Copy-installer.bat To See How You Can Run It. It Tries To Be Smart And Copy The Right Things, But You May Need To Be Explicit (e.g., "copy-installer.bat Out Debug"). It Is Safe To Re-run The Script To Copy Only Modified Files (after A Rebuild, For Example). You Can Also Use The Zip Action Of The Isolate Scripts (tools\mb\mb.py) To Package All The Files For A Target Into A Single Zip File, For Example: Python Tools\mb\mb.py Zip Out/Release Base_unittests Base_unittests.zip Finding All Memory Allocations It Is Possible To Use Heap Snapshots To Get Call Stacks On All Outstanding Allocations That Use The OS Heap. This Works Particularly Well If Heap Snapshots Are Started As Soon As The Chrome Browser Process Is Created, But Before It Starts Running. Details Can Be Found In This Batch File. However, With PartitionAlloc Everywhere Most Chromium Allocations No Longer Use The Windows Heap So This Will Only Find A Subset Of Allocations, Mostly From OS DLLs. Find Memory Leaks Note: As With Heap Snapshots The Utility Of UMDH Is Greatly Reduced Now Because PartitionAlloc Everywhere Has Mostly Replaced The Windows Heap. The Windows Heap Manager Has A Really Useful Debug Flag, Where It Can Be Asked To Capture And Store A Stack Trace With Every Allocation. The Tool To Scrape These Stack Traces Out Of Processes Is UMDH, Which Comes With WinDbg. UMDH Is Great. It Will Capture A Snapshot Of The Heap State As Many Times As You Like, And It'll Do It Fairly Quickly. You Then Run It Again Against Either A Single Snapshot, Or A Pair Of Snapshots, At Which Time It'll Symbolize The Stack Traces And Aggregate Usage Up To Unique Stack Traces. Turning On The User Stack Trace Database For Chrome.exe With Gflags.exe Makes It Run Unbearably Slowly; However, Turning On The User Stack Trace Database On For The Browser Alone Is Just Fine. While It's Possible To Turn On The User Stack Database With The "!gflag" Debugging Extension, It's Too Late To Do This By The Time The Initial Debugger Breakpoint Hits. The Only Reasonable Way To Do This Is To Launch GFlags.exe, Enable The User Stack Trace Database (per Image Below), Launch Chrome Under The Debugger. Set A Breakpont When Chrome.dll Loads With "sxe Ld Chrome.dll". Step Up, To Allow Chrome.dll To Initialize. Disable The Stack Trace Database In GFlags.exe. Continue Chrome, Optionally Detaching The Debugger. Image GFlags.exe Settings For User Mode Stack Trace Database. If You Then Ever Suffer A Browser Memory Leak, You Can Snarf A Dump Of The Process With Umdh -p: > Chrome-browser-leak-umdh-dump.txt Which Can Then Typically Be "trivially" Analyzed To Find The Culprit. Miscellaneous Note That By Default Application Verifier Only Works With Non-official Builds Of Chromium. To Use Application Verifier On Official Builds You Need To Add --disable-features=RendererCodeIntegrity To Avoid Sandbox Crashes In Renderer Processes. See Crbug.com/1004989 For Details. See Also This Page. Application Verifier Is A Free Tool From Microsoft (available As Part Of The Windows SDK) That Can Be Used To Flush Out Programming Errors. Starting With M68 Application Verifier Can Be Enabled For Chrome.exe Without Needing To Disable The Sandbox. After Adding Chrome.exe To The List Of Applications To Be Stressed You Need To Expand The List Of Basics Checks And Disable The Leak Checks. You May Also Need To Disable Handles And Locks Checks Depending On Your Graphics Driver And Specific Chrome Version, But The Eventual Goal Is To Have Chrome Run With Handles And Locks Checks Enabled. When Bugs Are Found Chrome Will Trigger A Breakpoint So Running All Chrome Processes Under A Debugger Is Recommended. Chrome Will Run Much More Slowly Because Application Verifier Puts Every Heap Allocation On A Separate Page. Note That With PartitionAlloc Everywhere Most Chromium Allocations Don't Actually Go Through The Windows Heap And Are Therefore Unaffected By Application Verifier. You Can Check The Undocumented 'Cuzz' Checkbox In Application Verifier To Get The Windows Thread Scheduler To Add Some Extra Randomness In Order To Help Expose Race Conditions In Your Code. To Put A Breakpoint On CreateFile(), Add This Break Point: {,,kernel32.dll}_CreateFileW@28 {,,kernel32.dll} Specifies The DLL (context Operator). _ Prefix Means Extern "C". @28 Postfix Means _stdcall With The Stack Pop At The End Of The Function. I.e. The Number Of Arguments In BYTES. You Can Use DebugView From SysInternals Or Sawbuck To View LOG() Messages That Normally Go To Stderr On POSIX.
“The Chromium Logo The Chromium Projects Home Chromium ChromiumOS Quick Links Report Bugs Discuss Other Sites Chromium Blog Google Chrome Extensions Except As Otherwise Noted, The Content Of This Page Is Licensed Under A Creative Commons Attribution 2.5 License, And Examples Are Licensed Under The BSD License. Privacy Edit This Page For Developers > How-Tos > Debugging Chromium On Windows First See Get The Code For Checkout And Build Instructions. Getting Started You Can Use Visual Studio's Built-in Debugger Or WinDBG To Debug Chromium. You Don't Need To Use The IDE To Build In Order To Use The Debugger: Autoninja Is Used To Build Chromium And Most Developers Invoke It From A Command Prompt, And Then Open The IDE For Debugging As Necessary. To Start Debugging An Already-built Executable With Visual Studio Just Launch Visual Studio (2019 Or Higher) And Select File-> Open-> Project/Solution (Ctrl+Shift+O) And Select The Executable Of Interest. This Will Create A Solution With That Executable As The 'project'. You Can Then Launch The Debugger With F5 Or F11 Or From The Debug Menu. If You Right-click On The Executable In Solution Explorer And Select Properties Then You Can Edit Things Such As The Executable Path, Command-line Arguments, And Working Directory. You Can Add Additional Executables To The Solution By Using File-> Add-> Existing Project And Selecting Another Already-built Executable. You Can Select Which One To Debug By Right-clicking On One Of Them In Solution Explorer And Selecting Set As Startup Project. When Your Solution File Is Customized To Your Taste You Can Save It To A Directory Such As Out\solutions. Saving It There Helps Ensure That Relative Paths To Source Files, Printed From Build Commands, Will Correctly Identify The Source Files. The Tools Menu Can Be Used To Add Commands To Do Things Like Invoke Autoninja To Build Chrome, Compile The Selected Source File, Or Other Things. Visual Studio 2017 Is Not Recommended For Debugging Of Chromium - Use A Newer Version For Best Performance And Stability. Symbol_level=2 Is The Default On Windows And Gives Full Debugging Information With Types, Locals, Globals, Function Names, And Source/line Information. Symbol_level=1 Creates Smaller PDBs With Just Function Names, And Source/line Information - Source-level Debugging Is Still Supported (new From June 2019), But Local Variables And Type Information Are Missing. Symbol_level=0 Gives Extremely Limited Debugging Abilities, Mostly Just Viewing Call Stacks When Chromium Crashes. Browsing Source Code If You Use A Solution File Generated By Gn (gn Gen --ide=vs) Then Intellisense May Help You Navigate The Code. If This Doesn't Work Or If You Use A Solution Created As Above Then You May Want To Install VsChromium To Help Navigate The Code, As Well As Using Https://source.chromium.org. Profiles It's A Good Idea To Use A Different Chrome Profile For Your Debugging. If You Are Debugging Google Chrome Branded Builds, Or Use A Chromium Build As Your Primary Browser, The Profiles Can Collide So You Can't Run Both At Once, And Your Stable Browser Might See Profile Versions From The Future (Google Chrome And Chromium Use Different Profile Directories By Default So Won't Collide). Use The Command-line Option: --user-data-dir=C:\tmp\my_debug_profile (replace The Path As Necessary) Using The IDE, Go To The Debugging Tab Of The Properties Of The Chrome Project, And Set The Command Arguments. Chrome Debug Log Enable Chrome Debug Logging To A File By Passing --enable-logging --v=1 Command-line Flags At Startup. Debug Builds Place The Chrome_debug.log File In The Out\Debug Directory. Release Builds Place The File In The Top Level Of The User Data Chromium App Directory, Which Is OS-version-dependent. For More Information, See Logging And User Data Directory Details. Symbol Server If You Are Debugging Official Google Chrome Release Builds, Use The Symbol Server: Https://chromium-browser-symsrv.commondatastorage.googleapis.com In Visual Studio, This Goes In Tools > Options Under Debugging > Symbols. You Should Set Up A Local Cache In A Empty Directory On Your Computer. In Windbg You Can Add This To Your Symbol Server Search Path With The Command Below, Where C:\symbols Is A Local Cache Directory: .sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Alternately, You Can Set The _NT_SYMBOL_PATH Environment Variable To Include Both The Microsoft And Google Symbol Servers - VS, Windbg, And Other Tools Should Both Respect This Environment Variable: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Note That Symbol Servers Will Let The Debuggers Download Both The PE Files (DLLs And EXEs) And The PDB Files. Chrome Often Loads Third Party Libraries And Partial Symbols For Some Of These Are Also Public. For Example: AMD: Https://download.amd.com/dir/bin Nvidia: Https://driver-symbols.nvidia.com/ Intel: Https://software.intel.com/sites/downloads/symbols/ For Example, For Completeness, The Following Symbol Server Environment Variable Will Resolve All Of The Above Sources - But This Is More Than Is Normally Needed: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://download.amd.com/dir/bin;SRV\*C:\symbols\*https://driver-symbols.nvidia.com/;SRV\*C:\symbols\*https://software.intel.com/sites/downloads/symbols/ Source Indexing You Should Set Up Source Indexing In Your Debugger (.srcfix In Windbg, Tools-> Options-> Debugging-> General-> Enable Source Server Support In Visual Studio) So That The Correct Source Files Will Automatically Be Downloaded Based On Information In The Downloaded Symbols. Additionally, You Must Have Python In Your Path In Order For The Command That Fetches Source Files To Succeed; Launching The Debugger From The Same Environment As Where You Build Chromium Is An Easy Way To Ensure It's Present. This Is Highly Recommended When Debugging Released Google Chrome Builds Or Looking At Crash Dumps. Having The Correct Version Of The Source Files Automatically Show Up Saves Significant Time So You Should Definitely Set This. Multi-process Issues Chromium Can Be Challenging To Debug Because Of Its Multi-process Architecture. When You Select Run In The Debugger, Only The Main Browser Process Will Be Debugged. The Code That Actually Renders Web Pages (the Renderer) And The Plugins Will Be In Separate Processes That's Not (yet!) Being Debugged. The ProcessExplorer Tool Has A Process Tree View Where You Can See How These Processes Are Related. You Can Also Get The Process IDs Associated With Each Tab From The Chrome Task Manager (right-click On An Empty Area Of The Window Title Bar To Open). Automatically Attach To Child Processes There Are Two Visual Studio Extensions That Enable The Debugger To Automatically Attach To All Chrome Processes, So You Can Debug All Of Chrome At Once. Microsoft's Child Process Debugging Power Tool Is A Standalone Extension For This, And VsChromium Is Another Option That Bundles Many Other Additional Features. In Addition To Installing One Of These Extensions, You Must Run Visual Studio As Administrator, Or It Will Silently Fail To Attach To Some Of Chrome's Child Processes. Single-process Mode One Way To Debug Issues Is To Run Chromium In Single-process Mode. This Will Allow You To See The Entire State Of The Program Without Extra Work (although It Will Still Have Many Threads). To Use Single-process Mode, Add The Command-line Flag --single-process This Approach Isn't Perfect Because Some Problems Won't Manifest Themselves In This Mode And Some Features Don't Work And Worker Threads Are Still Spawned Into New Processes. Manually Attaching To A Child Process You Can Attach To The Running Child Processes With The Debugger. Select Tools > Attach To Process And Click The Chrome.exe Process You Want To Attach To. Before Attaching, Make Sure You Have Selected Only Native Code When Attaching To The Process This Is Done By Clicking Select... In The Attach To Process Window And Only Checking Native. If You Forget This, It May Attempt To Attach In "WebKit" Mode To Debug JavaScript, And You'll Get An Error Message "An Operation Is Not Legal In The Current State." You Can Now Debug The Two Processes As If They Were One. When You Are Debugging Multiple Processes, Open The Debug > Windows > Processes Window To Switch Between Them. Sometimes You Are Debugging Something That Only Happens On Startup, And Want To See The Child Process As Soon As It Starts. Use: --renderer-startup-dialog --no-sandbox You Have To Disable The Sandbox Or The Dialog Box Will Be Prohibited From Showing. When The Dialog Appears, Visit Tools > Attach To Process And Attach To The Process Showing The Renderer Startup Dialog. Now You're Debugging In The Renderer And Can Continue Execution By Pressing OK In The Dialog. Startup Dialogs Also Exist For Other Child Process Types: --gpu-startup-dialog, --ppapi-startup-dialog, --utility-startup-dialog, --plugin-startup-dialog (for NPAPI). For Utilities, You Can Add A Service Type --utility-startup-dialog=data_decoder.mojom.DataDecoderService. You Can Also Try The Vs-chromium Plug-in To Attach To The Right Processes. Semi-automatically Attaching The Debugger To Child Processes The Following Flags Cause Child Processes To Wait For 60 Seconds In A Busy Loop For A Debugger To Attach To The Process. Once Either Condition Is True, It Continues On; No Exception Is Thrown. --wait-for-debugger-children[=filter] The Filter, If Provided, Will Fire Only If It Matches The --type Parameter To The Process. Values Include Renderer, Plugin (for NPAPI), Ppapi, Gpu-process, And Utility. When Using This Option, It May Be Helpful To Limit The Number Of Renderer Processes Spawned, Using: --renderer-process-limit=1 Image File Execution Options Using Image File Execution Options (IFEO) Will Not Work Because CreateProcess() Returns The Handle To The Debugger Process Instead Of The Intended Child Process. There Are Also Issues With The Sandbox. Time Travel Debugging You Can Do Time Travel Debugging Using WinDbg Preview (must Be Installed From The Microsoft Store). This Lets You Execute A Program Forward And Backwards. After Capturing A Trace, You Can Set Breakpoints And Step Through Code As Normal, But Also Provides 'backwards' Commands (g-, T-, P-) So That You Can Go Back And Forth Through The Execution. It Is Especially Useful To Set Data Breakpoints (ba Command) And Reverse Continuing, So You Can See When A Certain Variable Was Last Changed To Its Current Value. Chromium Specifics: The Type Of Injection The Time Travel Tracer Needs To Perform Is Incompatible With The Chromium Sandbox. In Order To Record A Trace, You'll Need To Run With --no-sandbox. Chromium Cannot Run Elevated With Administrator Privileges, So The "Launch Executable (advance)" Option Won't Work, You'll Need To Attach After The Process Has Already Launched Via The Checkbox In The Bottom Right. If You Need To Record Startup-like Things, You'll Have To Use --{browser,gpu,renderer,utility}-startup-dialog, Then Attach (and Hope The Relevant Code Hasn't Executed Before That Point). JsDbg -- Data Structure Visualization You Can Install JsDbg As A Plugin For WinDbg Or Visual Studio. It Interactively Lets You Look At Data Structures (such As The DOM Tree, Accessibility Tree, Layout Object Tree, And Others) In A Web Browser As You Debug. See The JsDbg Site For Some Screen Shots And Usage Examples. This Also Works When Examining Memory Dumps (though Not Minidumps), And Also Works Together With Time Travel Debugging. Visual Studio Hints Debug Visualizers Chrome's Custom Debug Visualizers Should Be Added To The Pdb Files And Automatically Picked Up By Visual Studio. The Definitions Are In //tools/win/DebugVisualizers If You Need To Modify Them (the BUILD.gn File There Has Additional Instructions). Don't Step Into Trivial Functions The Debugger Can Be Configured To Automatically Not Step Into Functions Based On Regular Expression. Edit Default.natstepfilter In The Following Directory: For Visual Studio 2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers (for The Current User Only) For Visual Studio 2017 Pro: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2017\Visualizers (for The Current User Only) Add Regular Expressions Of Functions To Not Step Into. Remember To Regex-escape And XML-escape Them, E.g. < For < And \. For A Literal Dot. Example: Operator New NoStepInto Operator Delete NoStepInto Std::.* NoStepInto WTF::.*Ptr ::.* NoStepInto This File Is Read At Start Of A Debugging Session (F5), So You Don't Need To Restart Visual Studio After Changing It. More Info: Microsoft Email Thread V8 And Chromium V8 Supports Many Command-line Flags That Are Useful For Debugging. V8 Command-line Flags Can Be Set Via The Chromium Command-line Flag --js-flags; For Instance: Chrome.exe --js-flags="--trace_exception --heap_stats" Note That Some V8 Command-line Flags Exist Only In The Debug Build Of V8. For A List Of All V8 Flags Try: Chrome.exe --js-flags="--help" Graphics Debugging GPU Acceleration Of Rendering Can Be More Easily Debugged With Tools. See: Graphics Debugging In Visual Studio 2013 Graphical Debugging With NVIDIA NSight Debugging On Another Machine Sometimes It's Useful To Debug Installation And Execution On A Machine Other Than Your Primary Build Box. To Run The Installer On Said Other Machine, First Build The Mini_installer Target On Your Main Build Machine (e.g., Autoninja -C Out\Debug Mini_installer). Next, On The Debug Machine: Make The Build Machine's Build Volume Available On The Debug Machine Either By Mounting It Locally (e.g., Z:\) Or By Crafting A UNC Path To It (e.g., \\builder\src) Open Up A Command Prompt And Change To A Local Disk Run Src\tools\win\copy-installer.bat In The Remote Checkout By Way Of The Mount (e.g., Z:\PATHTOCHECKOUT\src\...) Or UNC Path (e.g., \\builder\src\...). This Will Copy The Installer, DLLs, And PDBs Into Your Debug Machine's C:\out Or C:\build (depending On If You're Rocking The Component=shared_library Build Or Not) Run C:\out\Debug\mini_installer.exe With The Flags Of Your Choice To Install Chrome. This Can Take Some Time, Especially On A Slow Machine. Watch The Task Manager And Wait Until Mini_installer.exe Exits Before Trying To Launch Chrome (by Way Of The Shortcut(s) Created By The Installer) For Extra Pleasure, Add C:\out\Debug To Your _NT_SYMBOL_PATH Environment Variable Consider Reading The Documentation At The Top Of Copy-installer.bat To See How You Can Run It. It Tries To Be Smart And Copy The Right Things, But You May Need To Be Explicit (e.g., "copy-installer.bat Out Debug"). It Is Safe To Re-run The Script To Copy Only Modified Files (after A Rebuild, For Example). You Can Also Use The Zip Action Of The Isolate Scripts (tools\mb\mb.py) To Package All The Files For A Target Into A Single Zip File, For Example: Python Tools\mb\mb.py Zip Out/Release Base_unittests Base_unittests.zip Finding All Memory Allocations It Is Possible To Use Heap Snapshots To Get Call Stacks On All Outstanding Allocations That Use The OS Heap. This Works Particularly Well If Heap Snapshots Are Started As Soon As The Chrome Browser Process Is Created, But Before It Starts Running. Details Can Be Found In This Batch File. However, With PartitionAlloc Everywhere Most Chromium Allocations No Longer Use The Windows Heap So This Will Only Find A Subset Of Allocations, Mostly From OS DLLs. Find Memory Leaks Note: As With Heap Snapshots The Utility Of UMDH Is Greatly Reduced Now Because PartitionAlloc Everywhere Has Mostly Replaced The Windows Heap. The Windows Heap Manager Has A Really Useful Debug Flag, Where It Can Be Asked To Capture And Store A Stack Trace With Every Allocation. The Tool To Scrape These Stack Traces Out Of Processes Is UMDH, Which Comes With WinDbg. UMDH Is Great. It Will Capture A Snapshot Of The Heap State As Many Times As You Like, And It'll Do It Fairly Quickly. You Then Run It Again Against Either A Single Snapshot, Or A Pair Of Snapshots, At Which Time It'll Symbolize The Stack Traces And Aggregate Usage Up To Unique Stack Traces. Turning On The User Stack Trace Database For Chrome.exe With Gflags.exe Makes It Run Unbearably Slowly; However, Turning On The User Stack Trace Database On For The Browser Alone Is Just Fine. While It's Possible To Turn On The User Stack Database With The "!gflag" Debugging Extension, It's Too Late To Do This By The Time The Initial Debugger Breakpoint Hits. The Only Reasonable Way To Do This Is To Launch GFlags.exe, Enable The User Stack Trace Database (per Image Below), Launch Chrome Under The Debugger. Set A Breakpont When Chrome.dll Loads With "sxe Ld Chrome.dll". Step Up, To Allow Chrome.dll To Initialize. Disable The Stack Trace Database In GFlags.exe. Continue Chrome, Optionally Detaching The Debugger. Image GFlags.exe Settings For User Mode Stack Trace Database. If You Then Ever Suffer A Browser Memory Leak, You Can Snarf A Dump Of The Process With Umdh -p: > Chrome-browser-leak-umdh-dump.txt Which Can Then Typically Be "trivially" Analyzed To Find The Culprit. Miscellaneous Note That By Default Application Verifier Only Works With Non-official Builds Of Chromium. To Use Application Verifier On Official Builds You Need To Add --disable-features=RendererCodeIntegrity To Avoid Sandbox Crashes In Renderer Processes. See Crbug.com/1004989 For Details. See Also This Page. Application Verifier Is A Free Tool From Microsoft (available As Part Of The Windows SDK) That Can Be Used To Flush Out Programming Errors. Starting With M68 Application Verifier Can Be Enabled For Chrome.exe Without Needing To Disable The Sandbox. After Adding Chrome.exe To The List Of Applications To Be Stressed You Need To Expand The List Of Basics Checks And Disable The Leak Checks. You May Also Need To Disable Handles And Locks Checks Depending On Your Graphics Driver And Specific Chrome Version, But The Eventual Goal Is To Have Chrome Run With Handles And Locks Checks Enabled. When Bugs Are Found Chrome Will Trigger A Breakpoint So Running All Chrome Processes Under A Debugger Is Recommended. Chrome Will Run Much More Slowly Because Application Verifier Puts Every Heap Allocation On A Separate Page. Note That With PartitionAlloc Everywhere Most Chromium Allocations Don't Actually Go Through The Windows Heap And Are Therefore Unaffected By Application Verifier. You Can Check The Undocumented 'Cuzz' Checkbox In Application Verifier To Get The Windows Thread Scheduler To Add Some Extra Randomness In Order To Help Expose Race Conditions In Your Code. To Put A Breakpoint On CreateFile(), Add This Break Point: {,,kernel32.dll}_CreateFileW@28 {,,kernel32.dll} Specifies The DLL (context Operator). _ Prefix Means Extern "C". @28 Postfix Means _stdcall With The Stack Pop At The End Of The Function. I.e. The Number Of Arguments In BYTES. You Can Use DebugView From SysInternals Or Sawbuck To View LOG() Messages That Normally Go To Stderr On POSIX.” Subjects and Themes:
Edition Identifiers:
- Internet Archive ID: debugging-chromium-on-windows
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 0.33 Mbs, the file-s went public at Fri Jul 11 2025.
Available formats:
Archive BitTorrent - Metadata - Text -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find The Chromium Logo The Chromium Projects Home Chromium ChromiumOS Quick Links Report Bugs Discuss Other Sites Chromium Blog Google Chrome Extensions Except As Otherwise Noted, The Content Of This Page Is Licensed Under A Creative Commons Attribution 2.5 License, And Examples Are Licensed Under The BSD License. Privacy Edit This Page For Developers > How-Tos > Debugging Chromium On Windows First See Get The Code For Checkout And Build Instructions. Getting Started You Can Use Visual Studio's Built-in Debugger Or WinDBG To Debug Chromium. You Don't Need To Use The IDE To Build In Order To Use The Debugger: Autoninja Is Used To Build Chromium And Most Developers Invoke It From A Command Prompt, And Then Open The IDE For Debugging As Necessary. To Start Debugging An Already-built Executable With Visual Studio Just Launch Visual Studio (2019 Or Higher) And Select File-> Open-> Project/Solution (Ctrl+Shift+O) And Select The Executable Of Interest. This Will Create A Solution With That Executable As The 'project'. You Can Then Launch The Debugger With F5 Or F11 Or From The Debug Menu. If You Right-click On The Executable In Solution Explorer And Select Properties Then You Can Edit Things Such As The Executable Path, Command-line Arguments, And Working Directory. You Can Add Additional Executables To The Solution By Using File-> Add-> Existing Project And Selecting Another Already-built Executable. You Can Select Which One To Debug By Right-clicking On One Of Them In Solution Explorer And Selecting Set As Startup Project. When Your Solution File Is Customized To Your Taste You Can Save It To A Directory Such As Out\solutions. Saving It There Helps Ensure That Relative Paths To Source Files, Printed From Build Commands, Will Correctly Identify The Source Files. The Tools Menu Can Be Used To Add Commands To Do Things Like Invoke Autoninja To Build Chrome, Compile The Selected Source File, Or Other Things. Visual Studio 2017 Is Not Recommended For Debugging Of Chromium - Use A Newer Version For Best Performance And Stability. Symbol_level=2 Is The Default On Windows And Gives Full Debugging Information With Types, Locals, Globals, Function Names, And Source/line Information. Symbol_level=1 Creates Smaller PDBs With Just Function Names, And Source/line Information - Source-level Debugging Is Still Supported (new From June 2019), But Local Variables And Type Information Are Missing. Symbol_level=0 Gives Extremely Limited Debugging Abilities, Mostly Just Viewing Call Stacks When Chromium Crashes. Browsing Source Code If You Use A Solution File Generated By Gn (gn Gen --ide=vs) Then Intellisense May Help You Navigate The Code. If This Doesn't Work Or If You Use A Solution Created As Above Then You May Want To Install VsChromium To Help Navigate The Code, As Well As Using Https://source.chromium.org. Profiles It's A Good Idea To Use A Different Chrome Profile For Your Debugging. If You Are Debugging Google Chrome Branded Builds, Or Use A Chromium Build As Your Primary Browser, The Profiles Can Collide So You Can't Run Both At Once, And Your Stable Browser Might See Profile Versions From The Future (Google Chrome And Chromium Use Different Profile Directories By Default So Won't Collide). Use The Command-line Option: --user-data-dir=C:\tmp\my_debug_profile (replace The Path As Necessary) Using The IDE, Go To The Debugging Tab Of The Properties Of The Chrome Project, And Set The Command Arguments. Chrome Debug Log Enable Chrome Debug Logging To A File By Passing --enable-logging --v=1 Command-line Flags At Startup. Debug Builds Place The Chrome_debug.log File In The Out\Debug Directory. Release Builds Place The File In The Top Level Of The User Data Chromium App Directory, Which Is OS-version-dependent. For More Information, See Logging And User Data Directory Details. Symbol Server If You Are Debugging Official Google Chrome Release Builds, Use The Symbol Server: Https://chromium-browser-symsrv.commondatastorage.googleapis.com In Visual Studio, This Goes In Tools > Options Under Debugging > Symbols. You Should Set Up A Local Cache In A Empty Directory On Your Computer. In Windbg You Can Add This To Your Symbol Server Search Path With The Command Below, Where C:\symbols Is A Local Cache Directory: .sympath+ SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Alternately, You Can Set The _NT_SYMBOL_PATH Environment Variable To Include Both The Microsoft And Google Symbol Servers - VS, Windbg, And Other Tools Should Both Respect This Environment Variable: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com Note That Symbol Servers Will Let The Debuggers Download Both The PE Files (DLLs And EXEs) And The PDB Files. Chrome Often Loads Third Party Libraries And Partial Symbols For Some Of These Are Also Public. For Example: AMD: Https://download.amd.com/dir/bin Nvidia: Https://driver-symbols.nvidia.com/ Intel: Https://software.intel.com/sites/downloads/symbols/ For Example, For Completeness, The Following Symbol Server Environment Variable Will Resolve All Of The Above Sources - But This Is More Than Is Normally Needed: _NT_SYMBOL_PATH=SRV\*C:\symbols\*https://msdl.microsoft.com/download/symbols;SRV\*C:\symbols\*https://chromium-browser-symsrv.commondatastorage.googleapis.com;SRV\*C:\symbols\*https://download.amd.com/dir/bin;SRV\*C:\symbols\*https://driver-symbols.nvidia.com/;SRV\*C:\symbols\*https://software.intel.com/sites/downloads/symbols/ Source Indexing You Should Set Up Source Indexing In Your Debugger (.srcfix In Windbg, Tools-> Options-> Debugging-> General-> Enable Source Server Support In Visual Studio) So That The Correct Source Files Will Automatically Be Downloaded Based On Information In The Downloaded Symbols. Additionally, You Must Have Python In Your Path In Order For The Command That Fetches Source Files To Succeed; Launching The Debugger From The Same Environment As Where You Build Chromium Is An Easy Way To Ensure It's Present. This Is Highly Recommended When Debugging Released Google Chrome Builds Or Looking At Crash Dumps. Having The Correct Version Of The Source Files Automatically Show Up Saves Significant Time So You Should Definitely Set This. Multi-process Issues Chromium Can Be Challenging To Debug Because Of Its Multi-process Architecture. When You Select Run In The Debugger, Only The Main Browser Process Will Be Debugged. The Code That Actually Renders Web Pages (the Renderer) And The Plugins Will Be In Separate Processes That's Not (yet!) Being Debugged. The ProcessExplorer Tool Has A Process Tree View Where You Can See How These Processes Are Related. You Can Also Get The Process IDs Associated With Each Tab From The Chrome Task Manager (right-click On An Empty Area Of The Window Title Bar To Open). Automatically Attach To Child Processes There Are Two Visual Studio Extensions That Enable The Debugger To Automatically Attach To All Chrome Processes, So You Can Debug All Of Chrome At Once. Microsoft's Child Process Debugging Power Tool Is A Standalone Extension For This, And VsChromium Is Another Option That Bundles Many Other Additional Features. In Addition To Installing One Of These Extensions, You Must Run Visual Studio As Administrator, Or It Will Silently Fail To Attach To Some Of Chrome's Child Processes. Single-process Mode One Way To Debug Issues Is To Run Chromium In Single-process Mode. This Will Allow You To See The Entire State Of The Program Without Extra Work (although It Will Still Have Many Threads). To Use Single-process Mode, Add The Command-line Flag --single-process This Approach Isn't Perfect Because Some Problems Won't Manifest Themselves In This Mode And Some Features Don't Work And Worker Threads Are Still Spawned Into New Processes. Manually Attaching To A Child Process You Can Attach To The Running Child Processes With The Debugger. Select Tools > Attach To Process And Click The Chrome.exe Process You Want To Attach To. Before Attaching, Make Sure You Have Selected Only Native Code When Attaching To The Process This Is Done By Clicking Select... In The Attach To Process Window And Only Checking Native. If You Forget This, It May Attempt To Attach In "WebKit" Mode To Debug JavaScript, And You'll Get An Error Message "An Operation Is Not Legal In The Current State." You Can Now Debug The Two Processes As If They Were One. When You Are Debugging Multiple Processes, Open The Debug > Windows > Processes Window To Switch Between Them. Sometimes You Are Debugging Something That Only Happens On Startup, And Want To See The Child Process As Soon As It Starts. Use: --renderer-startup-dialog --no-sandbox You Have To Disable The Sandbox Or The Dialog Box Will Be Prohibited From Showing. When The Dialog Appears, Visit Tools > Attach To Process And Attach To The Process Showing The Renderer Startup Dialog. Now You're Debugging In The Renderer And Can Continue Execution By Pressing OK In The Dialog. Startup Dialogs Also Exist For Other Child Process Types: --gpu-startup-dialog, --ppapi-startup-dialog, --utility-startup-dialog, --plugin-startup-dialog (for NPAPI). For Utilities, You Can Add A Service Type --utility-startup-dialog=data_decoder.mojom.DataDecoderService. You Can Also Try The Vs-chromium Plug-in To Attach To The Right Processes. Semi-automatically Attaching The Debugger To Child Processes The Following Flags Cause Child Processes To Wait For 60 Seconds In A Busy Loop For A Debugger To Attach To The Process. Once Either Condition Is True, It Continues On; No Exception Is Thrown. --wait-for-debugger-children[=filter] The Filter, If Provided, Will Fire Only If It Matches The --type Parameter To The Process. Values Include Renderer, Plugin (for NPAPI), Ppapi, Gpu-process, And Utility. When Using This Option, It May Be Helpful To Limit The Number Of Renderer Processes Spawned, Using: --renderer-process-limit=1 Image File Execution Options Using Image File Execution Options (IFEO) Will Not Work Because CreateProcess() Returns The Handle To The Debugger Process Instead Of The Intended Child Process. There Are Also Issues With The Sandbox. Time Travel Debugging You Can Do Time Travel Debugging Using WinDbg Preview (must Be Installed From The Microsoft Store). This Lets You Execute A Program Forward And Backwards. After Capturing A Trace, You Can Set Breakpoints And Step Through Code As Normal, But Also Provides 'backwards' Commands (g-, T-, P-) So That You Can Go Back And Forth Through The Execution. It Is Especially Useful To Set Data Breakpoints (ba Command) And Reverse Continuing, So You Can See When A Certain Variable Was Last Changed To Its Current Value. Chromium Specifics: The Type Of Injection The Time Travel Tracer Needs To Perform Is Incompatible With The Chromium Sandbox. In Order To Record A Trace, You'll Need To Run With --no-sandbox. Chromium Cannot Run Elevated With Administrator Privileges, So The "Launch Executable (advance)" Option Won't Work, You'll Need To Attach After The Process Has Already Launched Via The Checkbox In The Bottom Right. If You Need To Record Startup-like Things, You'll Have To Use --{browser,gpu,renderer,utility}-startup-dialog, Then Attach (and Hope The Relevant Code Hasn't Executed Before That Point). JsDbg -- Data Structure Visualization You Can Install JsDbg As A Plugin For WinDbg Or Visual Studio. It Interactively Lets You Look At Data Structures (such As The DOM Tree, Accessibility Tree, Layout Object Tree, And Others) In A Web Browser As You Debug. See The JsDbg Site For Some Screen Shots And Usage Examples. This Also Works When Examining Memory Dumps (though Not Minidumps), And Also Works Together With Time Travel Debugging. Visual Studio Hints Debug Visualizers Chrome's Custom Debug Visualizers Should Be Added To The Pdb Files And Automatically Picked Up By Visual Studio. The Definitions Are In //tools/win/DebugVisualizers If You Need To Modify Them (the BUILD.gn File There Has Additional Instructions). Don't Step Into Trivial Functions The Debugger Can Be Configured To Automatically Not Step Into Functions Based On Regular Expression. Edit Default.natstepfilter In The Following Directory: For Visual Studio 2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2015\Visualizers (for The Current User Only) For Visual Studio 2017 Pro: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Packages\Debugger\Visualizers (for All Users) Or %USERPROFILE%\My Documents\Visual Studio 2017\Visualizers (for The Current User Only) Add Regular Expressions Of Functions To Not Step Into. Remember To Regex-escape And XML-escape Them, E.g. < For < And \. For A Literal Dot. Example: Operator New NoStepInto Operator Delete NoStepInto Std::.* NoStepInto WTF::.*Ptr ::.* NoStepInto This File Is Read At Start Of A Debugging Session (F5), So You Don't Need To Restart Visual Studio After Changing It. More Info: Microsoft Email Thread V8 And Chromium V8 Supports Many Command-line Flags That Are Useful For Debugging. V8 Command-line Flags Can Be Set Via The Chromium Command-line Flag --js-flags; For Instance: Chrome.exe --js-flags="--trace_exception --heap_stats" Note That Some V8 Command-line Flags Exist Only In The Debug Build Of V8. For A List Of All V8 Flags Try: Chrome.exe --js-flags="--help" Graphics Debugging GPU Acceleration Of Rendering Can Be More Easily Debugged With Tools. See: Graphics Debugging In Visual Studio 2013 Graphical Debugging With NVIDIA NSight Debugging On Another Machine Sometimes It's Useful To Debug Installation And Execution On A Machine Other Than Your Primary Build Box. To Run The Installer On Said Other Machine, First Build The Mini_installer Target On Your Main Build Machine (e.g., Autoninja -C Out\Debug Mini_installer). Next, On The Debug Machine: Make The Build Machine's Build Volume Available On The Debug Machine Either By Mounting It Locally (e.g., Z:\) Or By Crafting A UNC Path To It (e.g., \\builder\src) Open Up A Command Prompt And Change To A Local Disk Run Src\tools\win\copy-installer.bat In The Remote Checkout By Way Of The Mount (e.g., Z:\PATHTOCHECKOUT\src\...) Or UNC Path (e.g., \\builder\src\...). This Will Copy The Installer, DLLs, And PDBs Into Your Debug Machine's C:\out Or C:\build (depending On If You're Rocking The Component=shared_library Build Or Not) Run C:\out\Debug\mini_installer.exe With The Flags Of Your Choice To Install Chrome. This Can Take Some Time, Especially On A Slow Machine. Watch The Task Manager And Wait Until Mini_installer.exe Exits Before Trying To Launch Chrome (by Way Of The Shortcut(s) Created By The Installer) For Extra Pleasure, Add C:\out\Debug To Your _NT_SYMBOL_PATH Environment Variable Consider Reading The Documentation At The Top Of Copy-installer.bat To See How You Can Run It. It Tries To Be Smart And Copy The Right Things, But You May Need To Be Explicit (e.g., "copy-installer.bat Out Debug"). It Is Safe To Re-run The Script To Copy Only Modified Files (after A Rebuild, For Example). You Can Also Use The Zip Action Of The Isolate Scripts (tools\mb\mb.py) To Package All The Files For A Target Into A Single Zip File, For Example: Python Tools\mb\mb.py Zip Out/Release Base_unittests Base_unittests.zip Finding All Memory Allocations It Is Possible To Use Heap Snapshots To Get Call Stacks On All Outstanding Allocations That Use The OS Heap. This Works Particularly Well If Heap Snapshots Are Started As Soon As The Chrome Browser Process Is Created, But Before It Starts Running. Details Can Be Found In This Batch File. However, With PartitionAlloc Everywhere Most Chromium Allocations No Longer Use The Windows Heap So This Will Only Find A Subset Of Allocations, Mostly From OS DLLs. Find Memory Leaks Note: As With Heap Snapshots The Utility Of UMDH Is Greatly Reduced Now Because PartitionAlloc Everywhere Has Mostly Replaced The Windows Heap. The Windows Heap Manager Has A Really Useful Debug Flag, Where It Can Be Asked To Capture And Store A Stack Trace With Every Allocation. The Tool To Scrape These Stack Traces Out Of Processes Is UMDH, Which Comes With WinDbg. UMDH Is Great. It Will Capture A Snapshot Of The Heap State As Many Times As You Like, And It'll Do It Fairly Quickly. You Then Run It Again Against Either A Single Snapshot, Or A Pair Of Snapshots, At Which Time It'll Symbolize The Stack Traces And Aggregate Usage Up To Unique Stack Traces. Turning On The User Stack Trace Database For Chrome.exe With Gflags.exe Makes It Run Unbearably Slowly; However, Turning On The User Stack Trace Database On For The Browser Alone Is Just Fine. While It's Possible To Turn On The User Stack Database With The "!gflag" Debugging Extension, It's Too Late To Do This By The Time The Initial Debugger Breakpoint Hits. The Only Reasonable Way To Do This Is To Launch GFlags.exe, Enable The User Stack Trace Database (per Image Below), Launch Chrome Under The Debugger. Set A Breakpont When Chrome.dll Loads With "sxe Ld Chrome.dll". Step Up, To Allow Chrome.dll To Initialize. Disable The Stack Trace Database In GFlags.exe. Continue Chrome, Optionally Detaching The Debugger. Image GFlags.exe Settings For User Mode Stack Trace Database. If You Then Ever Suffer A Browser Memory Leak, You Can Snarf A Dump Of The Process With Umdh -p: > Chrome-browser-leak-umdh-dump.txt Which Can Then Typically Be "trivially" Analyzed To Find The Culprit. Miscellaneous Note That By Default Application Verifier Only Works With Non-official Builds Of Chromium. To Use Application Verifier On Official Builds You Need To Add --disable-features=RendererCodeIntegrity To Avoid Sandbox Crashes In Renderer Processes. See Crbug.com/1004989 For Details. See Also This Page. Application Verifier Is A Free Tool From Microsoft (available As Part Of The Windows SDK) That Can Be Used To Flush Out Programming Errors. Starting With M68 Application Verifier Can Be Enabled For Chrome.exe Without Needing To Disable The Sandbox. After Adding Chrome.exe To The List Of Applications To Be Stressed You Need To Expand The List Of Basics Checks And Disable The Leak Checks. You May Also Need To Disable Handles And Locks Checks Depending On Your Graphics Driver And Specific Chrome Version, But The Eventual Goal Is To Have Chrome Run With Handles And Locks Checks Enabled. When Bugs Are Found Chrome Will Trigger A Breakpoint So Running All Chrome Processes Under A Debugger Is Recommended. Chrome Will Run Much More Slowly Because Application Verifier Puts Every Heap Allocation On A Separate Page. Note That With PartitionAlloc Everywhere Most Chromium Allocations Don't Actually Go Through The Windows Heap And Are Therefore Unaffected By Application Verifier. You Can Check The Undocumented 'Cuzz' Checkbox In Application Verifier To Get The Windows Thread Scheduler To Add Some Extra Randomness In Order To Help Expose Race Conditions In Your Code. To Put A Breakpoint On CreateFile(), Add This Break Point: {,,kernel32.dll}_CreateFileW@28 {,,kernel32.dll} Specifies The DLL (context Operator). _ Prefix Means Extern "C". @28 Postfix Means _stdcall With The Stack Pop At The End Of The Function. I.e. The Number Of Arguments In BYTES. You Can Use DebugView From SysInternals Or Sawbuck To View LOG() Messages That Normally Go To Stderr On POSIX. at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
8Computer Architecture And Programming Of The Intel X86 Architecture
By Patrick H. Stakem
This book is an introduction to computer architecture, hardware and software, presented in the context of the Intel x86 family. The x86 describes not only a line of microprocessor chips dating back to 1978, but also an instruction set architecture (ISA) that the chips implement. The chip families were built by Intel and other manufacturers, and execute the same instructions, but in different manners. The results are the same, arithmetically and logically, but may differ in their timing. Why the focus on the Intel x86? It was the basis of the IBM personal computer (PC) family and its spin-offs. It has transitioned from a 16 to a 32 to a 64-bit architecture, keeping compatibility for more than 30 years. It's an de-facto industry standard that has withstood the test of time. This book covers the Intel ISA-16 and ISA-32 architectures from the 8086/8088 to the Pentium, including the math coprocessors. A chart of ISA processors is included. The purpose of this book is to provide the basic background information for an understanding of the 80x86 family, the IBM Personal Computer (pc), and programming in assembly language as an introduction to the broader field of Computer Architecture. It will stress the pervasiveness of this pc-based technology in everyday things and events. It will provide an introduction to Software System Engineering and the Design for Debugging methodology. This book is a spin-off of a course in Computer Architecture/System Integration, taught in the graduate Engineering Science Program at Loyola College (now, Loyola University in Maryland). If we learn to program in the language c, for example, we can take our skills to any computer with a set of c-based tools. If we learn IA-32 assembly language, we have to relearn a language if we switch to a different architecture. So, why do we learn assembly language? Because it gives us insight into the underlying hardware, how it is organized, and how it operates. This book is dedicated to the graduate students in Engineering Science at Loyola College, Columbia Campus, who took the course EG-611, “System Integration I, the x86 Architecture and Assembly Language.” The course was given to hundreds of students over a span of 15 years by myself and others.
“Computer Architecture And Programming Of The Intel X86 Architecture” Metadata:
- Title: ➤ Computer Architecture And Programming Of The Intel X86 Architecture
- Author: Patrick H. Stakem
- Language: English
“Computer Architecture And Programming Of The Intel X86 Architecture” Subjects and Themes:
- Subjects: ➤ ISA-16 - ISA-32 - Pentium - floating point coprocessor - MMX extensions - assembly language - protected mode - undocumented instructions - LOADALL - self-modifying code
Edition Identifiers:
- Internet Archive ID: CompArchProgX86
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 59.00 Mbs, the file-s for this book were downloaded 3761 times, the file-s went public at Wed Jul 31 2013.
Available formats:
Abbyy GZ - Animated GIF - Archive BitTorrent - DjVu - DjVuTXT - Djvu XML - EPUB - Item Tile - Metadata - Scandata - Single Page Processed JP2 ZIP - Text PDF -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Computer Architecture And Programming Of The Intel X86 Architecture at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
9Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings
This book is an introduction to computer architecture, hardware and software, presented in the context of the Intel x86 family. The x86 describes not only a line of microprocessor chips dating back to 1978, but also an instruction set architecture (ISA) that the chips implement. The chip families were built by Intel and other manufacturers, and execute the same instructions, but in different manners. The results are the same, arithmetically and logically, but may differ in their timing. Why the focus on the Intel x86? It was the basis of the IBM personal computer (PC) family and its spin-offs. It has transitioned from a 16 to a 32 to a 64-bit architecture, keeping compatibility for more than 30 years. It's an de-facto industry standard that has withstood the test of time. This book covers the Intel ISA-16 and ISA-32 architectures from the 8086/8088 to the Pentium, including the math coprocessors. A chart of ISA processors is included. The purpose of this book is to provide the basic background information for an understanding of the 80x86 family, the IBM Personal Computer (pc), and programming in assembly language as an introduction to the broader field of Computer Architecture. It will stress the pervasiveness of this pc-based technology in everyday things and events. It will provide an introduction to Software System Engineering and the Design for Debugging methodology. This book is a spin-off of a course in Computer Architecture/System Integration, taught in the graduate Engineering Science Program at Loyola College (now, Loyola University in Maryland). If we learn to program in the language c, for example, we can take our skills to any computer with a set of c-based tools. If we learn IA-32 assembly language, we have to relearn a language if we switch to a different architecture. So, why do we learn assembly language? Because it gives us insight into the underlying hardware, how it is organized, and how it operates. This book is dedicated to the graduate students in Engineering Science at Loyola College, Columbia Campus, who took the course EG-611, “System Integration I, the x86 Architecture and Assembly Language.” The course was given to hundreds of students over a span of 15 years by myself and others.
“Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings” Metadata:
- Title: ➤ Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings
- Language: English
“Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings” Subjects and Themes:
Edition Identifiers:
- Internet Archive ID: functionalprogra0000unse_r5v2
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 1938.11 Mbs, the file-s for this book were downloaded 29 times, the file-s went public at Wed Jun 08 2022.
Available formats:
ACS Encrypted PDF - AVIF Thumbnails ZIP - Cloth Cover Detection Log - DjVuTXT - Djvu XML - Dublin Core - Item Tile - JPEG Thumb - JSON - LCP Encrypted EPUB - LCP Encrypted PDF - Log - MARC - MARC Binary - Metadata - OCR Page Index - OCR Search Text - PNG - Page Numbers JSON - RePublisher Final Processing Log - RePublisher Initial Processing Log - Scandata - Single Page Original JP2 Tar - Single Page Processed JP2 ZIP - Text PDF - Title Page Detection Log - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Functional Programming Languages And Computer Architecture : 5th ACM Conference, Cambridge, MA, USA, August 26-30, 1991 : Proceedings at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
10Scientific Programming And Computer Architecture
A variety of programming models relevant to scientists explained, with an emphasis on how programming constructs map to parts of the computer.What makes computer programs fast or slow? To answer this question, we have to get behind the abstractions of programming languages and look at how a computer really works. This book examines and explains a variety of scientific programming models (programming models relevant to scientists) with an emphasis on how programming constructs map to different parts of the computer's architecture. Two themes emerge: program speed and program modularity. Throughout this book, the premise is to "get under the hood," and the discussion is tied to specific programs. The book digs into linkers, compilers, operating systems, and computer architecture to understand how the different parts of the computer interact with programs. It begins with a review of C/C++ and explanations of how libraries, linkers, and Makefiles work. Programming models covered include Pthreads, OpenMP, MPI, TCP/IP, and CUDA.The emphasis on how computers work leads the reader into computer architecture and occasionally into the operating system kernel. The operating system studied is Linux, the preferred platform for scientific computing. Linux is also open source, which allows users to peer into its inner workings. A brief appendix provides a useful table of machines used to time programs. The book's website (https://github.com/divakarvi/bk-spca) has all the programs described in the book as well as a link to the html text.
“Scientific Programming And Computer Architecture” Metadata:
- Title: ➤ Scientific Programming And Computer Architecture
- Language: English
“Scientific Programming And Computer Architecture” Subjects and Themes:
- Subjects: ➤ C - C++ - programming languages - processor - memory - network - high performance computing - computer science - engineering - super computing - book
Edition Identifiers:
- Internet Archive ID: oapen-20.500.12657-26041
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 245.23 Mbs, the file-s for this book were downloaded 47 times, the file-s went public at Sat Jun 01 2024.
Available formats:
Archive BitTorrent - DjVuTXT - Djvu XML - Item Tile - Metadata - OCR Page Index - OCR Search Text - Page Numbers JSON - Scandata - Single Page Processed JP2 ZIP - Text PDF - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Scientific Programming And Computer Architecture at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
11Computer Programming And Architecture : The VAX
By Levy, Henry M., 1952-
A variety of programming models relevant to scientists explained, with an emphasis on how programming constructs map to parts of the computer.What makes computer programs fast or slow? To answer this question, we have to get behind the abstractions of programming languages and look at how a computer really works. This book examines and explains a variety of scientific programming models (programming models relevant to scientists) with an emphasis on how programming constructs map to different parts of the computer's architecture. Two themes emerge: program speed and program modularity. Throughout this book, the premise is to "get under the hood," and the discussion is tied to specific programs. The book digs into linkers, compilers, operating systems, and computer architecture to understand how the different parts of the computer interact with programs. It begins with a review of C/C++ and explanations of how libraries, linkers, and Makefiles work. Programming models covered include Pthreads, OpenMP, MPI, TCP/IP, and CUDA.The emphasis on how computers work leads the reader into computer architecture and occasionally into the operating system kernel. The operating system studied is Linux, the preferred platform for scientific computing. Linux is also open source, which allows users to peer into its inner workings. A brief appendix provides a useful table of machines used to time programs. The book's website (https://github.com/divakarvi/bk-spca) has all the programs described in the book as well as a link to the html text.
“Computer Programming And Architecture : The VAX” Metadata:
- Title: ➤ Computer Programming And Architecture : The VAX
- Author: Levy, Henry M., 1952-
- Language: English
“Computer Programming And Architecture : The VAX” Subjects and Themes:
- Subjects: Computer architecture - VAX computers -- Programming - VAX computers
Edition Identifiers:
- Internet Archive ID: computerprogramm0000levy
Downloads Information:
The book is available for download in "texts" format, the size of the file-s is: 1141.94 Mbs, the file-s for this book were downloaded 71 times, the file-s went public at Tue Jul 09 2019.
Available formats:
ACS Encrypted EPUB - ACS Encrypted PDF - Abbyy GZ - Book Genome JSON - Cloth Cover Detection Log - DjVuTXT - Djvu XML - Dublin Core - Item Tile - JPEG Thumb - JSON - LCP Encrypted EPUB - LCP Encrypted PDF - Log - MARC - MARC Binary - Metadata - OCR Page Index - OCR Search Text - PNG - Page Numbers JSON - Scandata - Single Page Original JP2 Tar - Single Page Processed JP2 ZIP - Text PDF - chOCR - hOCR -
Related Links:
- Whefi.com: Download
- Whefi.com: Review - Coverage
- Internet Archive: Details
- Internet Archive Link: Downloads
Online Marketplaces
Find Computer Programming And Architecture : The VAX at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
Source: The Open Library
The Open Library Search Results
Available books for downloads and borrow from The Open Library
1Computer programming and architecture--the VAX-11
By Henry M. Levy

“Computer programming and architecture--the VAX-11” Metadata:
- Title: ➤ Computer programming and architecture--the VAX-11
- Author: Henry M. Levy
- Language: English
- Number of Pages: Median: 407
- Publisher: Digital Press
- Publish Date: 1980
- Publish Location: Bedford, Mass
“Computer programming and architecture--the VAX-11” Subjects and Themes:
- Subjects: ➤ Assembler language (Computer program language) - Computer architecture - Programming - VAX-11 (Computer) - Programmation - Computerarchitectuur - Programmeren (computers) - Ordinateurs - VAX 11 - Langage assembleur (Langage de programmation) - Architecture - Computerarchitektur - Programmierung - VAX-11 (Ordinateur) - Assembly languages (Electronic computers)
Edition Identifiers:
- The Open Library ID: OL4100003M
- Online Computer Library Center (OCLC) ID: 6250860
- Library of Congress Control Number (LCCN): 80014409
- All ISBNs: 093237607X - 9780932376077
Access and General Info:
- First Year Published: 1980
- Is Full Text Available: Yes
- Is The Book Public: No
- Access Status: Borrowable
Online Access
Downloads Are Not Available:
The book is not public therefore the download links will not allow the download of the entire book, however, borrowing the book online is available.
Online Borrowing:
- Borrowing from Open Library: Borrowing link
- Borrowing from Archive.org: Borrowing link
Online Marketplaces
Find Computer programming and architecture--the VAX-11 at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
Source: LibriVox
LibriVox Search Results
Available audio books for downloads from LibriVox
1Reuben Sachs: A Sketch
By Amy Levy
Reuben Sachs is a London lawyer whose political aspirations do not include marriage to Judith Quixano, the daughter of a respectable but unexceptional family. But without Reuben, a woman like Judith might have a bleak future in mid-19th century England: a loveless marriage or lifelong dependency are apparently her only options...<br></br>A feminist, a Jew, and a lesbian, Amy Levy wrote about Anglo-Jewish cultural mores and the lives of would-be independent women in Victorian society. Levy was as repelled by contemporary literature's occasional paragon (e.g., Daniel Deronda) as by its more frequent anti-Semitic stereotypes. REUBEN SACHS was her attempt at an honest, warts-and-all account of middle class Jewish life in late-19th century London. While many of Levy's contemporaries condemned the book as a <i>shanda fur die goyim</i> (an embarassment), Oscar Wilde wrote: "Its directness, its uncompromising truths, its depth of feeling, and above all, its absence of any single superfluous word, make REUBEN SACHS, in some sort, a classic." Amy Levy (1861-1889) was born in London and educated in Brighton and at Newnham College, Cambridge. Her social set included Beatrix Potter and Eleanor Marx, with whom she studied in the British Museum Reading Room, and lover Vernon Lee (Violet Padget). (Summary by Adrian Praetzellis)
“Reuben Sachs: A Sketch” Metadata:
- Title: Reuben Sachs: A Sketch
- Author: Amy Levy
- Language: English
- Publish Date: 1888
Edition Specifications:
- Format: Audio
- Number of Sections: 10
- Total Time: 4:01:55
Edition Identifiers:
- libriVox ID: 1701
Links and information:
Online Access
Download the Audio Book:
- File Name: reubensachs_ap_librivox
- File Format: zip
- Total Time: 4:01:55
- Download Link: Download link
Online Marketplaces
Find Reuben Sachs: A Sketch at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
2London Plane-Tree and Other Verse
By Amy Levy
Amy Levy was a British poet and novelist who is celebrated for her feminist positions and her engagement with homosexual romance during the Victorian era. Levy wrote stories, essays, and poems for periodicals, some popular and others literary. Her writing career began early; her poem "Ida Grey" appearing in the journal, The Pelican, when she was only fourteen. Her final book of poems, A London Plane-Tree And Other Verse (1889), contains lyrics that are among the first to show the influence of French symbolism. (Introduction excerpted from Wikipedia)
“London Plane-Tree and Other Verse” Metadata:
- Title: ➤ London Plane-Tree and Other Verse
- Author: Amy Levy
- Language: English
- Publish Date: 1889
Edition Specifications:
- Format: Audio
- Number of Sections: 52
- Total Time: 1:15:37
Edition Identifiers:
- libriVox ID: 6628
Links and information:
Online Access
Download the Audio Book:
- File Name: london_plane_tree_1205_librivox
- File Format: zip
- Total Time: 1:15:37
- Download Link: Download link
Online Marketplaces
Find London Plane-Tree and Other Verse at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
3Romance of a Shop
By Amy Levy

Praised by Oscar Wilde amongst other contemporaries, Amy Levy's first novel tells the story of the four Lorimer sisters, who decide to open their own photography business after the death of their father which has left them in poverty. The novel examines the opportunities and difficulties of urban life for the "New Woman" in the late nineteenth century. Not only was Levy unusual as a female novelist in this period, but she was also from an Anglo Jewish family. - Summary by Jane Gough
“Romance of a Shop” Metadata:
- Title: Romance of a Shop
- Author: Amy Levy
- Language: English
- Publish Date: 1889
Edition Specifications:
- Format: Audio
- Number of Sections: 25
- Total Time: 05:29:17
Edition Identifiers:
- libriVox ID: 14971
Links and information:
Online Access
Download the Audio Book:
- File Name: romance_of_a_shop_2201_librivox
- File Format: zip
- Total Time: 05:29:17
- Download Link: Download link
Online Marketplaces
Find Romance of a Shop at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
4Miss Meredith
By Amy Levy

Miss Meredith is not the most talented of her sisters. In fact, she considers herself the typical of them. She has the adventure of a life time when she is offered the post of governess to an ancient noble Italian family. Things become even more complicated when the favorite son of the family falls in love with her. This book reflects the ancient traditions, and shows how things can change and how people from different walks of life react to changes. - Summary by Stav Nisser
“Miss Meredith” Metadata:
- Title: Miss Meredith
- Author: Amy Levy
- Language: English
- Publish Date: 1889
Edition Specifications:
- Format: Audio
- Number of Sections: 14
- Total Time: 02:33:03
Edition Identifiers:
- libriVox ID: 16027
Links and information:
Online Access
Download the Audio Book:
- File Name: missmeredith_2103_librivox
- File Format: zip
- Total Time: 02:33:03
- Download Link: Download link
Online Marketplaces
Find Miss Meredith at online marketplaces:
- Amazon: Audiable, Kindle and printed editions.
- Ebay: New & used books.
Buy “Computer Programming And Architecture” online:
Shop for “Computer Programming And Architecture” on popular online marketplaces.
- Ebay: New and used books.