├── .gitignore ├── LICENSE ├── README.md ├── gallery ├── graph_GNU_MAKE_.png ├── graph_QEMU.png ├── graph_VIM.png ├── snake_cpp.svg ├── some_library_graph.png ├── test.png └── test.svg ├── gen_graph.py ├── requiments.txt └── test ├── test.c └── test.log /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarun27sh/gdb_graphs/a16f63fa1684042bcd6d2f9e20e49aac66899d30/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Tarun Sharma 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gen_graph.py 2 | 3 | ![Alt text](gallery/some_library_graph.png?raw=true "") 4 | 5 | 6 | ## Description 7 | Python command line tool to visualize function-call-flow for a C/C++ program using graphviz dot object and matplotlib. 8 | 9 | Directory structure: 10 | 11 | ├── gallery 12 | │ ├── graph_GNU_MAKE_.png 13 | │ ├── graph_QEMU.png 14 | │ ├── graph_VIM.png 15 | │ ├── some_library_graph.png 16 | │ ├── test.png 17 | │ └── test.svg 18 | ├── gen_graph.py 19 | ├── LICENSE 20 | ├── README.md 21 | ├── requiments.txt 22 | └── test 23 | ├── test.c 24 | └── test.log 25 | 26 | ## Motivation 27 | I wanted to view call-graph for OS source (written in C, C++) that connected APIs within one layer and APIs across layers. 28 | This helps in getting a bigger picture of the source code and makes understanding large code bases QUICK. 29 | 30 | ## Input 31 | Requires data from gdb to get nodes (functions) and edges (function 1 calling function 2). 32 | 33 | ## Output 34 | Di-graph showing relationship between functions across software layers, the "bigger picture". 35 | 36 | 37 | # Usage 38 | 39 | There are two parts to the whole process: 40 | 1. get data by runnning process under gdb 41 | 2. process this data with gen_graph.py 42 | 43 | 44 | ## Part I: Get data from GDB 45 | 46 | ### Test code 47 | 48 | $ cat test.c 49 | #include 50 | #include 51 | #include 52 | #include 53 | 54 | 55 | static void func9(void) { printf("leaf\n"); } 56 | 57 | void func8(void) { func9(); } 58 | 59 | void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 60 | void func7(void) { func8(); } 61 | 62 | void func6(void) { func7(); } 63 | 64 | void func5_1(const char* str) { printf("leaf (%s)\n", str); } 65 | void func5(void) { 66 | func5_1("graph me\n"); 67 | func6(); 68 | } 69 | 70 | void func4(void) { func5(); } 71 | void func3_1(int a, int b, int c) { printf("leaf\n"); } 72 | void func3(void) { 73 | func3_1(rand(), rand(), rand()); 74 | func4(); 75 | } 76 | 77 | void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 78 | void func2(void) { 79 | func2_1(rand(),rand()); 80 | func3(); 81 | } 82 | void func1(void) { func2(); } 83 | int main() 84 | { 85 | srand(time(NULL)); 86 | for(int i=0; i<10; ++i) { 87 | func1(); 88 | } 89 | return 0; 90 | } 91 | 92 | ### Enable debugging symbols 93 | $ gcc -g test.c 94 | 95 | ### Start binary under GDB 96 | $ gdb a.out 97 | . . . 98 | Reading symbols from a.out...done. 99 | 100 | #### Insert breakpoints on functions of interest, or to put in every funtion in a file: 101 | 102 | (gdb) rbreak test.c:. 103 | Breakpoint 1 at 0x400786: file test/test.c, line 33. 104 | void func1(void); 105 | Breakpoint 2 at 0x400760: file test/test.c, line 30. 106 | void func2(void); 107 | Breakpoint 3 at 0x40073d: file test/test.c, line 28. 108 | void func2_1(int, int); 109 | Breakpoint 4 at 0x400704: file test/test.c, line 24. 110 | void func3(void); 111 | Breakpoint 5 at 0x4006f0: file test/test.c, line 22. 112 | void func3_1(int, int, int); 113 | Breakpoint 6 at 0x4006d7: file test/test.c, line 21. 114 | void func4(void); 115 | Breakpoint 7 at 0x4006c1: file test/test.c, line 17. 116 | void func5(void); 117 | Breakpoint 8 at 0x4006a4: file test/test.c, line 15. 118 | void func5_1(const char *); 119 | Breakpoint 9 at 0x400690: file test/test.c, line 13. 120 | void func6(void); 121 | Breakpoint 10 at 0x400684: file test/test.c, line 11. 122 | void func7(void); 123 | Breakpoint 11 at 0x400664: file test/test.c, line 10. 124 | void func7_1(_Bool, int *); 125 | Breakpoint 12 at 0x40064b: file test/test.c, line 8. 126 | void func8(void); 127 | Breakpoint 13 at 0x400796: file test/test.c, line 36. 128 | int main(); 129 | Breakpoint 14 at 0x40063a: file test/test.c, line 7. 130 | static void func9(void); 131 | 132 | #### Enable logging 133 | (gdb) set pagination off 134 | (gdb) set print pretty 135 | (gdb) set logging file ./test.log 136 | (gdb) set logging on 137 | Copying output to ./test.log. 138 | 139 | #### Tell gdb to print backtrace and continue without asking when it hits a breakpoint 140 | (gdb) command 141 | Type commands for breakpoint(s) 1-10, one per line. 142 | End with a line saying just "end". 143 | >bt 144 | >c 145 | >end 146 | 147 | 148 | #### Start the program 149 | (gdb) r 150 | Starting program: /home/vagrant/c_code/a.out 151 | 152 | Once the program finishes, it would have dumped the logs to the disk in test.log 153 | 154 | 155 | ## Part II: run gen_graph.py on collected data 156 | 157 | ### Dependencies 158 | 159 | sudo apt-get install graphviz 160 | sudo python3 -m pip install -r requiments.txt 161 | 162 | 163 | ### Run gen_graph.py 164 | $ python3 gen_graph.py 165 | usage: gen_graph.py [-h] -i INPUT_FILE [-f {gdb,objdump}] 166 | gen_graph.py: error: the following arguments are required: -i/--input_file 167 | 168 | $ python3 gen_graph.py -i test/test.log 169 | 01/02/2021 08:36:58 PM [1] processing gdb bt data 170 | 01/02/2021 08:36:58 PM [2] adding nodes, edges, #ofnodes=13 171 | 01/02/2021 08:36:59 PM [3] Embedding JS 172 | 01/02/2021 08:36:59 PM [4] saving graph to: 173 | 01/02/2021 08:36:59 PM /home/vagrant/dwnlds/gdb_graphs/test.svg 174 | 01/02/2021 08:36:59 PM Finished 175 | 176 | 177 | Open the svg file in a browser 178 | ![Alt text](gallery/test.png?raw=true "") 179 | 180 | 181 | ## New 182 | - Interactive graphs: 183 | Click on a node and entire parent and child chain is highlighted 184 | (to reset - reload page - untill I find a better way to do from JS) 185 | - C++ Support 186 | - Node tooltip shows function arguments (max 6) 187 | -------------------------------------------------------------------------------- /gallery/graph_GNU_MAKE_.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarun27sh/gdb_graphs/a16f63fa1684042bcd6d2f9e20e49aac66899d30/gallery/graph_GNU_MAKE_.png -------------------------------------------------------------------------------- /gallery/graph_QEMU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarun27sh/gdb_graphs/a16f63fa1684042bcd6d2f9e20e49aac66899d30/gallery/graph_QEMU.png -------------------------------------------------------------------------------- /gallery/graph_VIM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarun27sh/gdb_graphs/a16f63fa1684042bcd6d2f9e20e49aac66899d30/gallery/graph_VIM.png -------------------------------------------------------------------------------- /gallery/snake_cpp.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 135 | 136 | Created by: Tarun Sharma (tarun27sh@gmail.com) 137 | 138 | 139 | _GLOBAL__sub_I__ZN5SnakeC2Ev 140 | 141 | _GLOBAL__sub_I__ZN5SnakeC2Ev 142 | 143 | 144 | __static_initialization_and_destruction_0 145 | 146 | __static_initialization_and_destruction_0 147 | 148 | 149 | _GLOBAL__sub_I__ZN5SnakeC2Ev->__static_initialization_and_destruction_0 150 | 151 | 152 | 153 | 154 | __libc_csu_init 155 | 156 | __libc_csu_init 157 | 158 | 159 | __libc_csu_init->_GLOBAL__sub_I__ZN5SnakeC2Ev 160 | 161 | 162 | 163 | 164 | _GLOBAL__sub_I__Z15init_win_paramsP11_WIN_struct 165 | 166 | _GLOBAL__sub_I__Z15init_win_paramsP11_WIN_struct 167 | 168 | 169 | __libc_csu_init->_GLOBAL__sub_I__Z15init_win_paramsP11_WIN_struct 170 | 171 | 172 | 173 | 174 | __libc_start_main 175 | 176 | __libc_start_main 177 | 178 | 179 | __libc_start_main->__libc_csu_init 180 | 181 | 182 | 183 | 184 | _start 185 | 186 | _start 187 | 188 | 189 | _start->__libc_start_main 190 | 191 | 192 | 193 | 194 | _GLOBAL__sub_I__Z15init_win_paramsP11_WIN_struct->__static_initialization_and_destruction_0 195 | 196 | 197 | 198 | 199 | Snake::Snake 200 | 201 | Snake::Snake 202 | 203 | 204 | NcursesGrid::NcursesGrid 205 | 206 | NcursesGrid::NcursesGrid 207 | 208 | 209 | Snake::Snake->NcursesGrid::NcursesGrid 210 | 211 | 212 | 213 | 214 | NcursesGrid::getRandomPoints 215 | 216 | NcursesGrid::getRandomPoints 217 | 218 | 219 | Snake::Snake->NcursesGrid::getRandomPoints 220 | 221 | 222 | 223 | 224 | main 225 | 226 | main 227 | 228 | 229 | main->Snake::Snake 230 | 231 | 232 | 233 | 234 | Snake::gameLoop 235 | 236 | Snake::gameLoop 237 | 238 | 239 | main->Snake::gameLoop 240 | 241 | 242 | 243 | 244 | init_win_params 245 | 246 | init_win_params 247 | 248 | 249 | NcursesGrid::NcursesGrid->init_win_params 250 | 251 | 252 | 253 | 254 | print_win_params 255 | 256 | print_win_params 257 | 258 | 259 | NcursesGrid::NcursesGrid->print_win_params 260 | 261 | 262 | 263 | 264 | create_box 265 | 266 | create_box 267 | 268 | 269 | NcursesGrid::NcursesGrid->create_box 270 | 271 | 272 | 273 | 274 | Snake::nextStep 275 | 276 | Snake::nextStep 277 | 278 | 279 | Snake::gameLoop->Snake::nextStep 280 | 281 | 282 | 283 | 284 | Snake::draw 285 | 286 | Snake::draw 287 | 288 | 289 | Snake::nextStep->Snake::draw 290 | 291 | 292 | 293 | 294 | NcursesGrid::draw 295 | 296 | NcursesGrid::draw 297 | 298 | 299 | Snake::draw->NcursesGrid::draw 300 | 301 | 302 | 303 | 304 | update_box 305 | 306 | update_box 307 | 308 | 309 | NcursesGrid::draw->update_box 310 | 311 | 312 | 313 | 314 | 315 | Nodes = 17 316 | Edges = 18 317 | 318 | 319 | 320 | -------------------------------------------------------------------------------- /gallery/some_library_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarun27sh/gdb_graphs/a16f63fa1684042bcd6d2f9e20e49aac66899d30/gallery/some_library_graph.png -------------------------------------------------------------------------------- /gallery/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarun27sh/gdb_graphs/a16f63fa1684042bcd6d2f9e20e49aac66899d30/gallery/test.png -------------------------------------------------------------------------------- /gallery/test.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | Created by: Tarun Sharma (tarun27sh@gmail.com) 11 | 12 | 13 | main 14 | 15 | main 16 | 17 | 18 | func1 19 | 20 | func1 21 | 22 | 23 | main->func1 24 | 25 | 26 | 27 | 28 | func2 29 | 30 | func2 31 | 32 | 33 | func1->func2 34 | 35 | 36 | 37 | 38 | func3 39 | 40 | func3 41 | 42 | 43 | func2->func3 44 | 45 | 46 | 47 | 48 | func4 49 | 50 | func4 51 | 52 | 53 | func3->func4 54 | 55 | 56 | 57 | 58 | func5 59 | 60 | func5 61 | 62 | 63 | func4->func5 64 | 65 | 66 | 67 | 68 | func6 69 | 70 | func6 71 | 72 | 73 | func5->func6 74 | 75 | 76 | 77 | 78 | func7 79 | 80 | func7 81 | 82 | 83 | func6->func7 84 | 85 | 86 | 87 | 88 | func8 89 | 90 | func8 91 | 92 | 93 | func7->func8 94 | 95 | 96 | 97 | 98 | func9 99 | 100 | func9 101 | 102 | 103 | func8->func9 104 | 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /gen_graph.py: -------------------------------------------------------------------------------- 1 | # Description: 2 | # Generate dot graph from gdb backtracet data 3 | # Author: 4 | # Tarun Sharma (tarun27sh@gmail.com) 5 | # Date: 6 | # 2019-01-19 7 | 8 | import os 9 | from matplotlib import use as muse 10 | from copy import deepcopy 11 | muse('Agg') 12 | import sys 13 | import pydotplus 14 | import argparse 15 | import pdb 16 | from pprint import pprint as pp 17 | import logging 18 | 19 | logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') 20 | logger = logging.getLogger(__name__) 21 | logger.setLevel(logging.INFO) 22 | 23 | HTML_SEP = ' ' 24 | 25 | # Make resulting SVG interactive 26 | js_string=''' 27 | 152 | ''' 153 | 154 | # parses into node in graph 155 | class GDBFrame(): 156 | def __init__(self): 157 | self.frame_no = None 158 | self.fn_name = None 159 | self.file_name = None 160 | self.fn_args = {} 161 | self.nof_arg_data = 0 162 | self.callers = [] # parent nodes, list of GDBFrame objs 163 | self.callees = [] # child nodes, list of GDBFrame objs 164 | 165 | def __str__(self): 166 | format_str = '#{} fn={}, args={}, file={}'.format(self.frame_no, self.fn_name, self.fn_args, self.file_name) 167 | return format_str 168 | 169 | def parse_frame_line(self, frame_str): 170 | frame_list = frame_str.split() 171 | self.frame_no = int(frame_list[0].strip('#')) 172 | if frame_list[1].startswith('0x'): 173 | self.fn_name = frame_list[3] 174 | else: 175 | self.fn_name = frame_list[1] 176 | self.file_name = frame_list[-1] 177 | self.fn_args = frame_str.split('(')[1].split(')')[0] 178 | 179 | 180 | 181 | # collection of nodes 182 | class GenGraph: 183 | def __init__(self, file_in, input_format='gdb'): 184 | self.nof_frames = 0 185 | self.parsed_frame_dict = {} # key=fn_name, val=GDBFrame() 186 | self.g = None 187 | # create graph obj 188 | self.g = pydotplus.Dot(graph_type='digraph', 189 | graph_name='Created by: Tarun Sharma (tarun27sh@gmail.com)', 190 | rankdir='LR', 191 | strict=True, 192 | ) 193 | if input_format==None or input_format=='gdb': 194 | self.parse_bt_file(file_in) 195 | self.add_nodes_edges() 196 | self.add_legend(len(self.g.get_edges()), len(self.g.get_nodes())) 197 | self.save_graph(file_in) 198 | 199 | def __str__(self): 200 | format_str = 'Len(frames) = {}, 1st frame={}'.format(len(self.parsed_frame_dict), self.parsed_frame_dict[list(self.parsed_frame_dict.keys())[0]]) 201 | return format_str 202 | 203 | def fix_up_global_dict(self, new_bt): 204 | logger.debug('fix up, #ofFrames={}'.format(len(new_bt))) 205 | for frame in new_bt: 206 | if frame.fn_name in self.parsed_frame_dict: 207 | existing_frame = self.parsed_frame_dict[frame.fn_name] 208 | existing_frame.callees.extend(frame.callees) 209 | existing_frame.callers.extend(frame.callers) 210 | # limit arg data to 6 entries only 211 | if frame.fn_args and existing_frame.nof_arg_data < 5: 212 | existing_frame.fn_args += '{}{}'.format(HTML_SEP, frame.fn_args) # provide HTML format '\n' 213 | existing_frame.nof_arg_data += 1 214 | else: 215 | self.parsed_frame_dict[frame.fn_name] = frame 216 | 217 | def parse_bt_file(self, in_file): 218 | logger.info('[1] processing gdb bt data') 219 | current_frame_list = [] 220 | old_frame = None 221 | with open(in_file) as f: 222 | for i,line in enumerate(f): 223 | if line.startswith('#'): 224 | frame = GDBFrame() 225 | frame.parse_frame_line(line) 226 | # new bt 227 | if frame.frame_no == 0: 228 | # new bt 229 | callee = None 230 | if len(current_frame_list) > 0: 231 | for i in range(len(current_frame_list) - 1): 232 | if callee: 233 | current_frame_list[i].callees.append(callee) 234 | current_frame_list[i].callers.append(current_frame_list[i+1]) 235 | callee = current_frame_list[i] 236 | current_frame_list[-1].callees.append(callee) 237 | self.fix_up_global_dict(current_frame_list) 238 | 239 | # reset for next iteration 240 | current_frame_list = [] 241 | current_frame_list.append(frame) 242 | else: 243 | # exising bt 244 | current_frame_list.append(frame) 245 | 246 | 247 | def add_nodes_edges(self): 248 | i = 0 249 | edge_seen_dict = {} # key = edge1_edge2 250 | logger.info('[2] adding nodes, edges, #ofnodes={}'.format(len(self.parsed_frame_dict))) 251 | for fn in self.parsed_frame_dict: 252 | print('Frame# [{}]\r'.format(i), end='') 253 | i+= 1 254 | frame = self.parsed_frame_dict[fn] 255 | new_element_name = '\"{}\"'.format(frame.fn_name) 256 | tooltip_str = '{}{}{}{}'.format(frame.file_name, HTML_SEP, 257 | frame.fn_args, HTML_SEP) 258 | logger.debug('adding node={}'.format(new_element_name)) 259 | self.g.add_node(pydotplus.Node( 260 | new_element_name, 261 | id=new_element_name, 262 | penwidth=0, 263 | tooltip=tooltip_str, 264 | style="filled", 265 | fillcolor='cornflowerblue', 266 | #bgcolor='cornflowerblue', 267 | shape='box', 268 | margin=0, 269 | fontname="Consolas", 270 | #fontname="Courier New", 271 | fontsize=12.0, 272 | fontcolor='white')) 273 | for callee in frame.callees: 274 | if callee: 275 | new_tuple = ('\"{}\"'.format(frame.fn_name), 276 | '\"{}\"'.format(callee.fn_name)) 277 | key = '{}_{}'.format(frame.fn_name, callee.fn_name) 278 | if key not in edge_seen_dict: 279 | logger.debug('adding edge={}'.format(new_tuple)) 280 | self.g.add_edge(pydotplus.Edge(new_tuple, 281 | id='\"{}|{}\"'.format( 282 | new_tuple[0].strip('"'), 283 | new_tuple[1].strip('"')), 284 | color='grey', 285 | )) 286 | edge_seen_dict[key] = True 287 | for caller in frame.callers: 288 | new_tuple = ('\"{}\"'.format(caller.fn_name), 289 | '\"{}\"'.format(frame.fn_name)) 290 | key = '{}_{}'.format(caller.fn_name, frame.fn_name) 291 | if key not in edge_seen_dict: 292 | logger.debug('adding edge={}'.format(new_tuple)) 293 | self.g.add_edge(pydotplus.Edge(new_tuple, 294 | id='\"{}|{}\"'.format( 295 | new_tuple[0].strip('"'), 296 | new_tuple[1].strip('"')), 297 | color='grey', 298 | )) 299 | edge_seen_dict[key] = True 300 | 301 | def save_graph(self, file_in): 302 | file_name = file_in.split('/')[-1] 303 | 304 | full_output_name="{}/{}.svg".format(os.getcwd(), file_name[:-4]) 305 | self.g.write_svg(full_output_name, 306 | prog='dot') 307 | logger.info('[3] Embedding JS') 308 | search_string = 'graph0' 309 | new_lines = '' 310 | with open(full_output_name, 'r') as f: 311 | for line in f: 312 | if search_string in line: 313 | new_lines += js_string 314 | new_lines += line 315 | logger.info('[4] saving graph to:') 316 | logger.info(" {}\n".format(full_output_name)) 317 | with open(full_output_name, "w") as text_file: 318 | text_file.write(new_lines) 319 | logger.info('Finished') 320 | 321 | def add_legend(self,nedges, nnodes): 322 | logger.debug('adding legend') 323 | node = pydotplus.Node( 324 | label='Nodes = {}\n Edges = {}'.format(nnodes, nedges), 325 | penwidth=0, 326 | style="filled", 327 | fillcolor='gold1', 328 | shape='box', 329 | fontname="Consolas", 330 | fontsize=14.0) 331 | self.g.add_node(node) 332 | 333 | 334 | if __name__ == "__main__": 335 | parser = argparse.ArgumentParser(description='read gen_graph inputs') 336 | parser.add_argument('-i', '--input_file', 337 | help='input data file', 338 | required=True) 339 | parser.add_argument('-f', '--input_file_format', 340 | help='input data file format (default=gdb)', 341 | choices=['gdb', 'objdump']) 342 | args = parser.parse_args() 343 | 344 | if args.input_file is None: 345 | args.print_usage() 346 | sys.exit() 347 | GenGraph(args.input_file, args.input_file_format) 348 | 349 | -------------------------------------------------------------------------------- /requiments.txt: -------------------------------------------------------------------------------- 1 | matplotlib 2 | pydotplus 3 | -------------------------------------------------------------------------------- /test/test.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | 7 | static void func9(void) { printf("leaf\n"); } 8 | void func8(void) { func9(); } 9 | 10 | void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 11 | void func7(void) { 12 | int a; 13 | func7_1(false, &a); 14 | func8(); 15 | } 16 | 17 | void func6(void) { func7(); } 18 | 19 | void func5_1(const char* str) { printf("leaf (%s)\n", str); } 20 | void func5(void) { 21 | func5_1("graph me\n"); 22 | func6(); 23 | } 24 | 25 | void func4(void) { func5(); } 26 | void func3_1(int a, int b, int c) { printf("leaf\n"); } 27 | void func3(void) { 28 | func3_1(rand(), rand(), rand()); 29 | func4(); 30 | } 31 | 32 | void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 33 | void func2(void) { 34 | func2_1(rand(),rand()); 35 | func3(); 36 | } 37 | void func1(void) { func2(); } 38 | int main() 39 | { 40 | srand(time(NULL)); 41 | for(int i=0; i<10; ++i) { 42 | func1(); 43 | } 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /test/test.log: -------------------------------------------------------------------------------- 1 | Breakpoint 1 at 0x40082e: file test/test.c, line 37. 2 | void func1(void); 3 | Breakpoint 2 at 0x400808: file test/test.c, line 34. 4 | void func2(void); 5 | Breakpoint 3 at 0x4007e5: file test/test.c, line 32. 6 | void func2_1(int, int); 7 | Breakpoint 4 at 0x4007ac: file test/test.c, line 28. 8 | void func3(void); 9 | Breakpoint 5 at 0x400798: file test/test.c, line 26. 10 | void func3_1(int, int, int); 11 | Breakpoint 6 at 0x40077f: file test/test.c, line 25. 12 | void func4(void); 13 | Breakpoint 7 at 0x400769: file test/test.c, line 21. 14 | void func5(void); 15 | Breakpoint 8 at 0x40074c: file test/test.c, line 19. 16 | void func5_1(const char *); 17 | Breakpoint 9 at 0x400738: file test/test.c, line 17. 18 | void func6(void); 19 | Breakpoint 10 at 0x4006f8: file test/test.c, line 11. 20 | void func7(void); 21 | Breakpoint 11 at 0x4006d4: file test/test.c, line 10. 22 | void func7_1(_Bool, int *); 23 | Breakpoint 12 at 0x4006bb: file test/test.c, line 8. 24 | void func8(void); 25 | Breakpoint 13 at 0x40083e: file test/test.c, line 40. 26 | int main(); 27 | Breakpoint 14 at 0x4006aa: file test/test.c, line 7. 28 | static void func9(void); 29 | Type commands for breakpoint(s) 1-14, one per line. 30 | End with a line saying just "end". 31 | Starting program: /home/vagrant/dwnlds/gdb_graphs/a.out 32 | 33 | Breakpoint 13, main () at test/test.c:40 34 | 40 srand(time(NULL)); 35 | #0 main () at test/test.c:40 36 | 37 | Breakpoint 1, func1 () at test/test.c:37 38 | 37 void func1(void) { func2(); } 39 | #0 func1 () at test/test.c:37 40 | #1 0x000000000040085d in main () at test/test.c:42 41 | 42 | Breakpoint 2, func2 () at test/test.c:34 43 | 34 func2_1(rand(),rand()); 44 | #0 func2 () at test/test.c:34 45 | #1 0x0000000000400833 in func1 () at test/test.c:37 46 | #2 0x000000000040085d in main () at test/test.c:42 47 | 48 | Breakpoint 3, func2_1 (a=1796246645, b=705937918) at test/test.c:32 49 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 50 | #0 func2_1 (a=1796246645, b=705937918) at test/test.c:32 51 | #1 0x000000000040081d in func2 () at test/test.c:34 52 | #2 0x0000000000400833 in func1 () at test/test.c:37 53 | #3 0x000000000040085d in main () at test/test.c:42 54 | 55 | Breakpoint 4, func3 () at test/test.c:28 56 | 28 func3_1(rand(), rand(), rand()); 57 | #0 func3 () at test/test.c:28 58 | #1 0x0000000000400822 in func2 () at test/test.c:35 59 | #2 0x0000000000400833 in func1 () at test/test.c:37 60 | #3 0x000000000040085d in main () at test/test.c:42 61 | 62 | Breakpoint 5, func3_1 (a=568181008, b=705244625, c=938498745) at test/test.c:26 63 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 64 | #0 func3_1 (a=568181008, b=705244625, c=938498745) at test/test.c:26 65 | #1 0x00000000004007cc in func3 () at test/test.c:28 66 | #2 0x0000000000400822 in func2 () at test/test.c:35 67 | #3 0x0000000000400833 in func1 () at test/test.c:37 68 | #4 0x000000000040085d in main () at test/test.c:42 69 | 70 | Breakpoint 6, func4 () at test/test.c:25 71 | 25 void func4(void) { func5(); } 72 | #0 func4 () at test/test.c:25 73 | #1 0x00000000004007d1 in func3 () at test/test.c:29 74 | #2 0x0000000000400822 in func2 () at test/test.c:35 75 | #3 0x0000000000400833 in func1 () at test/test.c:37 76 | #4 0x000000000040085d in main () at test/test.c:42 77 | 78 | Breakpoint 7, func5 () at test/test.c:21 79 | 21 func5_1("graph me\n"); 80 | #0 func5 () at test/test.c:21 81 | #1 0x0000000000400784 in func4 () at test/test.c:25 82 | #2 0x00000000004007d1 in func3 () at test/test.c:29 83 | #3 0x0000000000400822 in func2 () at test/test.c:35 84 | #4 0x0000000000400833 in func1 () at test/test.c:37 85 | #5 0x000000000040085d in main () at test/test.c:42 86 | 87 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 88 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 89 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 90 | #1 0x0000000000400773 in func5 () at test/test.c:21 91 | #2 0x0000000000400784 in func4 () at test/test.c:25 92 | #3 0x00000000004007d1 in func3 () at test/test.c:29 93 | #4 0x0000000000400822 in func2 () at test/test.c:35 94 | #5 0x0000000000400833 in func1 () at test/test.c:37 95 | #6 0x000000000040085d in main () at test/test.c:42 96 | 97 | Breakpoint 9, func6 () at test/test.c:17 98 | 17 void func6(void) { func7(); } 99 | #0 func6 () at test/test.c:17 100 | #1 0x0000000000400778 in func5 () at test/test.c:22 101 | #2 0x0000000000400784 in func4 () at test/test.c:25 102 | #3 0x00000000004007d1 in func3 () at test/test.c:29 103 | #4 0x0000000000400822 in func2 () at test/test.c:35 104 | #5 0x0000000000400833 in func1 () at test/test.c:37 105 | #6 0x000000000040085d in main () at test/test.c:42 106 | 107 | Breakpoint 10, func7 () at test/test.c:11 108 | 11 void func7(void) { 109 | #0 func7 () at test/test.c:11 110 | #1 0x000000000040073d in func6 () at test/test.c:17 111 | #2 0x0000000000400778 in func5 () at test/test.c:22 112 | #3 0x0000000000400784 in func4 () at test/test.c:25 113 | #4 0x00000000004007d1 in func3 () at test/test.c:29 114 | #5 0x0000000000400822 in func2 () at test/test.c:35 115 | #6 0x0000000000400833 in func1 () at test/test.c:37 116 | #7 0x000000000040085d in main () at test/test.c:42 117 | 118 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 119 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 120 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 121 | #1 0x0000000000400718 in func7 () at test/test.c:13 122 | #2 0x000000000040073d in func6 () at test/test.c:17 123 | #3 0x0000000000400778 in func5 () at test/test.c:22 124 | #4 0x0000000000400784 in func4 () at test/test.c:25 125 | #5 0x00000000004007d1 in func3 () at test/test.c:29 126 | #6 0x0000000000400822 in func2 () at test/test.c:35 127 | #7 0x0000000000400833 in func1 () at test/test.c:37 128 | #8 0x000000000040085d in main () at test/test.c:42 129 | 130 | Breakpoint 12, func8 () at test/test.c:8 131 | 8 void func8(void) { func9(); } 132 | #0 func8 () at test/test.c:8 133 | #1 0x000000000040071d in func7 () at test/test.c:14 134 | #2 0x000000000040073d in func6 () at test/test.c:17 135 | #3 0x0000000000400778 in func5 () at test/test.c:22 136 | #4 0x0000000000400784 in func4 () at test/test.c:25 137 | #5 0x00000000004007d1 in func3 () at test/test.c:29 138 | #6 0x0000000000400822 in func2 () at test/test.c:35 139 | #7 0x0000000000400833 in func1 () at test/test.c:37 140 | #8 0x000000000040085d in main () at test/test.c:42 141 | 142 | Breakpoint 14, func9 () at test/test.c:7 143 | 7 static void func9(void) { printf("leaf\n"); } 144 | #0 func9 () at test/test.c:7 145 | #1 0x00000000004006c0 in func8 () at test/test.c:8 146 | #2 0x000000000040071d in func7 () at test/test.c:14 147 | #3 0x000000000040073d in func6 () at test/test.c:17 148 | #4 0x0000000000400778 in func5 () at test/test.c:22 149 | #5 0x0000000000400784 in func4 () at test/test.c:25 150 | #6 0x00000000004007d1 in func3 () at test/test.c:29 151 | #7 0x0000000000400822 in func2 () at test/test.c:35 152 | #8 0x0000000000400833 in func1 () at test/test.c:37 153 | #9 0x000000000040085d in main () at test/test.c:42 154 | 155 | Breakpoint 1, func1 () at test/test.c:37 156 | 37 void func1(void) { func2(); } 157 | #0 func1 () at test/test.c:37 158 | #1 0x000000000040085d in main () at test/test.c:42 159 | 160 | Breakpoint 2, func2 () at test/test.c:34 161 | 34 func2_1(rand(),rand()); 162 | #0 func2 () at test/test.c:34 163 | #1 0x0000000000400833 in func1 () at test/test.c:37 164 | #2 0x000000000040085d in main () at test/test.c:42 165 | 166 | Breakpoint 3, func2_1 (a=368983417, b=813483458) at test/test.c:32 167 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 168 | #0 func2_1 (a=368983417, b=813483458) at test/test.c:32 169 | #1 0x000000000040081d in func2 () at test/test.c:34 170 | #2 0x0000000000400833 in func1 () at test/test.c:37 171 | #3 0x000000000040085d in main () at test/test.c:42 172 | 173 | Breakpoint 4, func3 () at test/test.c:28 174 | 28 func3_1(rand(), rand(), rand()); 175 | #0 func3 () at test/test.c:28 176 | #1 0x0000000000400822 in func2 () at test/test.c:35 177 | #2 0x0000000000400833 in func1 () at test/test.c:37 178 | #3 0x000000000040085d in main () at test/test.c:42 179 | 180 | Breakpoint 5, func3_1 (a=719987978, b=405660500, c=58792732) at test/test.c:26 181 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 182 | #0 func3_1 (a=719987978, b=405660500, c=58792732) at test/test.c:26 183 | #1 0x00000000004007cc in func3 () at test/test.c:28 184 | #2 0x0000000000400822 in func2 () at test/test.c:35 185 | #3 0x0000000000400833 in func1 () at test/test.c:37 186 | #4 0x000000000040085d in main () at test/test.c:42 187 | 188 | Breakpoint 6, func4 () at test/test.c:25 189 | 25 void func4(void) { func5(); } 190 | #0 func4 () at test/test.c:25 191 | #1 0x00000000004007d1 in func3 () at test/test.c:29 192 | #2 0x0000000000400822 in func2 () at test/test.c:35 193 | #3 0x0000000000400833 in func1 () at test/test.c:37 194 | #4 0x000000000040085d in main () at test/test.c:42 195 | 196 | Breakpoint 7, func5 () at test/test.c:21 197 | 21 func5_1("graph me\n"); 198 | #0 func5 () at test/test.c:21 199 | #1 0x0000000000400784 in func4 () at test/test.c:25 200 | #2 0x00000000004007d1 in func3 () at test/test.c:29 201 | #3 0x0000000000400822 in func2 () at test/test.c:35 202 | #4 0x0000000000400833 in func1 () at test/test.c:37 203 | #5 0x000000000040085d in main () at test/test.c:42 204 | 205 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 206 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 207 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 208 | #1 0x0000000000400773 in func5 () at test/test.c:21 209 | #2 0x0000000000400784 in func4 () at test/test.c:25 210 | #3 0x00000000004007d1 in func3 () at test/test.c:29 211 | #4 0x0000000000400822 in func2 () at test/test.c:35 212 | #5 0x0000000000400833 in func1 () at test/test.c:37 213 | #6 0x000000000040085d in main () at test/test.c:42 214 | 215 | Breakpoint 9, func6 () at test/test.c:17 216 | 17 void func6(void) { func7(); } 217 | #0 func6 () at test/test.c:17 218 | #1 0x0000000000400778 in func5 () at test/test.c:22 219 | #2 0x0000000000400784 in func4 () at test/test.c:25 220 | #3 0x00000000004007d1 in func3 () at test/test.c:29 221 | #4 0x0000000000400822 in func2 () at test/test.c:35 222 | #5 0x0000000000400833 in func1 () at test/test.c:37 223 | #6 0x000000000040085d in main () at test/test.c:42 224 | 225 | Breakpoint 10, func7 () at test/test.c:11 226 | 11 void func7(void) { 227 | #0 func7 () at test/test.c:11 228 | #1 0x000000000040073d in func6 () at test/test.c:17 229 | #2 0x0000000000400778 in func5 () at test/test.c:22 230 | #3 0x0000000000400784 in func4 () at test/test.c:25 231 | #4 0x00000000004007d1 in func3 () at test/test.c:29 232 | #5 0x0000000000400822 in func2 () at test/test.c:35 233 | #6 0x0000000000400833 in func1 () at test/test.c:37 234 | #7 0x000000000040085d in main () at test/test.c:42 235 | 236 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 237 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 238 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 239 | #1 0x0000000000400718 in func7 () at test/test.c:13 240 | #2 0x000000000040073d in func6 () at test/test.c:17 241 | #3 0x0000000000400778 in func5 () at test/test.c:22 242 | #4 0x0000000000400784 in func4 () at test/test.c:25 243 | #5 0x00000000004007d1 in func3 () at test/test.c:29 244 | #6 0x0000000000400822 in func2 () at test/test.c:35 245 | #7 0x0000000000400833 in func1 () at test/test.c:37 246 | #8 0x000000000040085d in main () at test/test.c:42 247 | 248 | Breakpoint 12, func8 () at test/test.c:8 249 | 8 void func8(void) { func9(); } 250 | #0 func8 () at test/test.c:8 251 | #1 0x000000000040071d in func7 () at test/test.c:14 252 | #2 0x000000000040073d in func6 () at test/test.c:17 253 | #3 0x0000000000400778 in func5 () at test/test.c:22 254 | #4 0x0000000000400784 in func4 () at test/test.c:25 255 | #5 0x00000000004007d1 in func3 () at test/test.c:29 256 | #6 0x0000000000400822 in func2 () at test/test.c:35 257 | #7 0x0000000000400833 in func1 () at test/test.c:37 258 | #8 0x000000000040085d in main () at test/test.c:42 259 | 260 | Breakpoint 14, func9 () at test/test.c:7 261 | 7 static void func9(void) { printf("leaf\n"); } 262 | #0 func9 () at test/test.c:7 263 | #1 0x00000000004006c0 in func8 () at test/test.c:8 264 | #2 0x000000000040071d in func7 () at test/test.c:14 265 | #3 0x000000000040073d in func6 () at test/test.c:17 266 | #4 0x0000000000400778 in func5 () at test/test.c:22 267 | #5 0x0000000000400784 in func4 () at test/test.c:25 268 | #6 0x00000000004007d1 in func3 () at test/test.c:29 269 | #7 0x0000000000400822 in func2 () at test/test.c:35 270 | #8 0x0000000000400833 in func1 () at test/test.c:37 271 | #9 0x000000000040085d in main () at test/test.c:42 272 | 273 | Breakpoint 1, func1 () at test/test.c:37 274 | 37 void func1(void) { func2(); } 275 | #0 func1 () at test/test.c:37 276 | #1 0x000000000040085d in main () at test/test.c:42 277 | 278 | Breakpoint 2, func2 () at test/test.c:34 279 | 34 func2_1(rand(),rand()); 280 | #0 func2 () at test/test.c:34 281 | #1 0x0000000000400833 in func1 () at test/test.c:37 282 | #2 0x000000000040085d in main () at test/test.c:42 283 | 284 | Breakpoint 3, func2_1 (a=345065819, b=929385511) at test/test.c:32 285 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 286 | #0 func2_1 (a=345065819, b=929385511) at test/test.c:32 287 | #1 0x000000000040081d in func2 () at test/test.c:34 288 | #2 0x0000000000400833 in func1 () at test/test.c:37 289 | #3 0x000000000040085d in main () at test/test.c:42 290 | 291 | Breakpoint 4, func3 () at test/test.c:28 292 | 28 func3_1(rand(), rand(), rand()); 293 | #0 func3 () at test/test.c:28 294 | #1 0x0000000000400822 in func2 () at test/test.c:35 295 | #2 0x0000000000400833 in func1 () at test/test.c:37 296 | #3 0x000000000040085d in main () at test/test.c:42 297 | 298 | Breakpoint 5, func3_1 (a=431493764, b=1375210557, c=893716268) at test/test.c:26 299 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 300 | #0 func3_1 (a=431493764, b=1375210557, c=893716268) at test/test.c:26 301 | #1 0x00000000004007cc in func3 () at test/test.c:28 302 | #2 0x0000000000400822 in func2 () at test/test.c:35 303 | #3 0x0000000000400833 in func1 () at test/test.c:37 304 | #4 0x000000000040085d in main () at test/test.c:42 305 | 306 | Breakpoint 6, func4 () at test/test.c:25 307 | 25 void func4(void) { func5(); } 308 | #0 func4 () at test/test.c:25 309 | #1 0x00000000004007d1 in func3 () at test/test.c:29 310 | #2 0x0000000000400822 in func2 () at test/test.c:35 311 | #3 0x0000000000400833 in func1 () at test/test.c:37 312 | #4 0x000000000040085d in main () at test/test.c:42 313 | 314 | Breakpoint 7, func5 () at test/test.c:21 315 | 21 func5_1("graph me\n"); 316 | #0 func5 () at test/test.c:21 317 | #1 0x0000000000400784 in func4 () at test/test.c:25 318 | #2 0x00000000004007d1 in func3 () at test/test.c:29 319 | #3 0x0000000000400822 in func2 () at test/test.c:35 320 | #4 0x0000000000400833 in func1 () at test/test.c:37 321 | #5 0x000000000040085d in main () at test/test.c:42 322 | 323 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 324 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 325 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 326 | #1 0x0000000000400773 in func5 () at test/test.c:21 327 | #2 0x0000000000400784 in func4 () at test/test.c:25 328 | #3 0x00000000004007d1 in func3 () at test/test.c:29 329 | #4 0x0000000000400822 in func2 () at test/test.c:35 330 | #5 0x0000000000400833 in func1 () at test/test.c:37 331 | #6 0x000000000040085d in main () at test/test.c:42 332 | 333 | Breakpoint 9, func6 () at test/test.c:17 334 | 17 void func6(void) { func7(); } 335 | #0 func6 () at test/test.c:17 336 | #1 0x0000000000400778 in func5 () at test/test.c:22 337 | #2 0x0000000000400784 in func4 () at test/test.c:25 338 | #3 0x00000000004007d1 in func3 () at test/test.c:29 339 | #4 0x0000000000400822 in func2 () at test/test.c:35 340 | #5 0x0000000000400833 in func1 () at test/test.c:37 341 | #6 0x000000000040085d in main () at test/test.c:42 342 | 343 | Breakpoint 10, func7 () at test/test.c:11 344 | 11 void func7(void) { 345 | #0 func7 () at test/test.c:11 346 | #1 0x000000000040073d in func6 () at test/test.c:17 347 | #2 0x0000000000400778 in func5 () at test/test.c:22 348 | #3 0x0000000000400784 in func4 () at test/test.c:25 349 | #4 0x00000000004007d1 in func3 () at test/test.c:29 350 | #5 0x0000000000400822 in func2 () at test/test.c:35 351 | #6 0x0000000000400833 in func1 () at test/test.c:37 352 | #7 0x000000000040085d in main () at test/test.c:42 353 | 354 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 355 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 356 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 357 | #1 0x0000000000400718 in func7 () at test/test.c:13 358 | #2 0x000000000040073d in func6 () at test/test.c:17 359 | #3 0x0000000000400778 in func5 () at test/test.c:22 360 | #4 0x0000000000400784 in func4 () at test/test.c:25 361 | #5 0x00000000004007d1 in func3 () at test/test.c:29 362 | #6 0x0000000000400822 in func2 () at test/test.c:35 363 | #7 0x0000000000400833 in func1 () at test/test.c:37 364 | #8 0x000000000040085d in main () at test/test.c:42 365 | 366 | Breakpoint 12, func8 () at test/test.c:8 367 | 8 void func8(void) { func9(); } 368 | #0 func8 () at test/test.c:8 369 | #1 0x000000000040071d in func7 () at test/test.c:14 370 | #2 0x000000000040073d in func6 () at test/test.c:17 371 | #3 0x0000000000400778 in func5 () at test/test.c:22 372 | #4 0x0000000000400784 in func4 () at test/test.c:25 373 | #5 0x00000000004007d1 in func3 () at test/test.c:29 374 | #6 0x0000000000400822 in func2 () at test/test.c:35 375 | #7 0x0000000000400833 in func1 () at test/test.c:37 376 | #8 0x000000000040085d in main () at test/test.c:42 377 | 378 | Breakpoint 14, func9 () at test/test.c:7 379 | 7 static void func9(void) { printf("leaf\n"); } 380 | #0 func9 () at test/test.c:7 381 | #1 0x00000000004006c0 in func8 () at test/test.c:8 382 | #2 0x000000000040071d in func7 () at test/test.c:14 383 | #3 0x000000000040073d in func6 () at test/test.c:17 384 | #4 0x0000000000400778 in func5 () at test/test.c:22 385 | #5 0x0000000000400784 in func4 () at test/test.c:25 386 | #6 0x00000000004007d1 in func3 () at test/test.c:29 387 | #7 0x0000000000400822 in func2 () at test/test.c:35 388 | #8 0x0000000000400833 in func1 () at test/test.c:37 389 | #9 0x000000000040085d in main () at test/test.c:42 390 | 391 | Breakpoint 1, func1 () at test/test.c:37 392 | 37 void func1(void) { func2(); } 393 | #0 func1 () at test/test.c:37 394 | #1 0x000000000040085d in main () at test/test.c:42 395 | 396 | Breakpoint 2, func2 () at test/test.c:34 397 | 34 func2_1(rand(),rand()); 398 | #0 func2 () at test/test.c:34 399 | #1 0x0000000000400833 in func1 () at test/test.c:37 400 | #2 0x000000000040085d in main () at test/test.c:42 401 | 402 | Breakpoint 3, func2_1 (a=1199872575, b=1244839404) at test/test.c:32 403 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 404 | #0 func2_1 (a=1199872575, b=1244839404) at test/test.c:32 405 | #1 0x000000000040081d in func2 () at test/test.c:34 406 | #2 0x0000000000400833 in func1 () at test/test.c:37 407 | #3 0x000000000040085d in main () at test/test.c:42 408 | 409 | Breakpoint 4, func3 () at test/test.c:28 410 | 28 func3_1(rand(), rand(), rand()); 411 | #0 func3 () at test/test.c:28 412 | #1 0x0000000000400822 in func2 () at test/test.c:35 413 | #2 0x0000000000400833 in func1 () at test/test.c:37 414 | #3 0x000000000040085d in main () at test/test.c:42 415 | 416 | Breakpoint 5, func3_1 (a=932763002, b=545088261, c=2134301022) at test/test.c:26 417 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 418 | #0 func3_1 (a=932763002, b=545088261, c=2134301022) at test/test.c:26 419 | #1 0x00000000004007cc in func3 () at test/test.c:28 420 | #2 0x0000000000400822 in func2 () at test/test.c:35 421 | #3 0x0000000000400833 in func1 () at test/test.c:37 422 | #4 0x000000000040085d in main () at test/test.c:42 423 | 424 | Breakpoint 6, func4 () at test/test.c:25 425 | 25 void func4(void) { func5(); } 426 | #0 func4 () at test/test.c:25 427 | #1 0x00000000004007d1 in func3 () at test/test.c:29 428 | #2 0x0000000000400822 in func2 () at test/test.c:35 429 | #3 0x0000000000400833 in func1 () at test/test.c:37 430 | #4 0x000000000040085d in main () at test/test.c:42 431 | 432 | Breakpoint 7, func5 () at test/test.c:21 433 | 21 func5_1("graph me\n"); 434 | #0 func5 () at test/test.c:21 435 | #1 0x0000000000400784 in func4 () at test/test.c:25 436 | #2 0x00000000004007d1 in func3 () at test/test.c:29 437 | #3 0x0000000000400822 in func2 () at test/test.c:35 438 | #4 0x0000000000400833 in func1 () at test/test.c:37 439 | #5 0x000000000040085d in main () at test/test.c:42 440 | 441 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 442 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 443 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 444 | #1 0x0000000000400773 in func5 () at test/test.c:21 445 | #2 0x0000000000400784 in func4 () at test/test.c:25 446 | #3 0x00000000004007d1 in func3 () at test/test.c:29 447 | #4 0x0000000000400822 in func2 () at test/test.c:35 448 | #5 0x0000000000400833 in func1 () at test/test.c:37 449 | #6 0x000000000040085d in main () at test/test.c:42 450 | 451 | Breakpoint 9, func6 () at test/test.c:17 452 | 17 void func6(void) { func7(); } 453 | #0 func6 () at test/test.c:17 454 | #1 0x0000000000400778 in func5 () at test/test.c:22 455 | #2 0x0000000000400784 in func4 () at test/test.c:25 456 | #3 0x00000000004007d1 in func3 () at test/test.c:29 457 | #4 0x0000000000400822 in func2 () at test/test.c:35 458 | #5 0x0000000000400833 in func1 () at test/test.c:37 459 | #6 0x000000000040085d in main () at test/test.c:42 460 | 461 | Breakpoint 10, func7 () at test/test.c:11 462 | 11 void func7(void) { 463 | #0 func7 () at test/test.c:11 464 | #1 0x000000000040073d in func6 () at test/test.c:17 465 | #2 0x0000000000400778 in func5 () at test/test.c:22 466 | #3 0x0000000000400784 in func4 () at test/test.c:25 467 | #4 0x00000000004007d1 in func3 () at test/test.c:29 468 | #5 0x0000000000400822 in func2 () at test/test.c:35 469 | #6 0x0000000000400833 in func1 () at test/test.c:37 470 | #7 0x000000000040085d in main () at test/test.c:42 471 | 472 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 473 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 474 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 475 | #1 0x0000000000400718 in func7 () at test/test.c:13 476 | #2 0x000000000040073d in func6 () at test/test.c:17 477 | #3 0x0000000000400778 in func5 () at test/test.c:22 478 | #4 0x0000000000400784 in func4 () at test/test.c:25 479 | #5 0x00000000004007d1 in func3 () at test/test.c:29 480 | #6 0x0000000000400822 in func2 () at test/test.c:35 481 | #7 0x0000000000400833 in func1 () at test/test.c:37 482 | #8 0x000000000040085d in main () at test/test.c:42 483 | 484 | Breakpoint 12, func8 () at test/test.c:8 485 | 8 void func8(void) { func9(); } 486 | #0 func8 () at test/test.c:8 487 | #1 0x000000000040071d in func7 () at test/test.c:14 488 | #2 0x000000000040073d in func6 () at test/test.c:17 489 | #3 0x0000000000400778 in func5 () at test/test.c:22 490 | #4 0x0000000000400784 in func4 () at test/test.c:25 491 | #5 0x00000000004007d1 in func3 () at test/test.c:29 492 | #6 0x0000000000400822 in func2 () at test/test.c:35 493 | #7 0x0000000000400833 in func1 () at test/test.c:37 494 | #8 0x000000000040085d in main () at test/test.c:42 495 | 496 | Breakpoint 14, func9 () at test/test.c:7 497 | 7 static void func9(void) { printf("leaf\n"); } 498 | #0 func9 () at test/test.c:7 499 | #1 0x00000000004006c0 in func8 () at test/test.c:8 500 | #2 0x000000000040071d in func7 () at test/test.c:14 501 | #3 0x000000000040073d in func6 () at test/test.c:17 502 | #4 0x0000000000400778 in func5 () at test/test.c:22 503 | #5 0x0000000000400784 in func4 () at test/test.c:25 504 | #6 0x00000000004007d1 in func3 () at test/test.c:29 505 | #7 0x0000000000400822 in func2 () at test/test.c:35 506 | #8 0x0000000000400833 in func1 () at test/test.c:37 507 | #9 0x000000000040085d in main () at test/test.c:42 508 | 509 | Breakpoint 1, func1 () at test/test.c:37 510 | 37 void func1(void) { func2(); } 511 | #0 func1 () at test/test.c:37 512 | #1 0x000000000040085d in main () at test/test.c:42 513 | 514 | Breakpoint 2, func2 () at test/test.c:34 515 | 34 func2_1(rand(),rand()); 516 | #0 func2 () at test/test.c:34 517 | #1 0x0000000000400833 in func1 () at test/test.c:37 518 | #2 0x000000000040085d in main () at test/test.c:42 519 | 520 | Breakpoint 3, func2_1 (a=187592607, b=2111253151) at test/test.c:32 521 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 522 | #0 func2_1 (a=187592607, b=2111253151) at test/test.c:32 523 | #1 0x000000000040081d in func2 () at test/test.c:34 524 | #2 0x0000000000400833 in func1 () at test/test.c:37 525 | #3 0x000000000040085d in main () at test/test.c:42 526 | 527 | Breakpoint 4, func3 () at test/test.c:28 528 | 28 func3_1(rand(), rand(), rand()); 529 | #0 func3 () at test/test.c:28 530 | #1 0x0000000000400822 in func2 () at test/test.c:35 531 | #2 0x0000000000400833 in func1 () at test/test.c:37 532 | #3 0x000000000040085d in main () at test/test.c:42 533 | 534 | Breakpoint 5, func3_1 (a=1503879249, b=161890257, c=1492177017) at test/test.c:26 535 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 536 | #0 func3_1 (a=1503879249, b=161890257, c=1492177017) at test/test.c:26 537 | #1 0x00000000004007cc in func3 () at test/test.c:28 538 | #2 0x0000000000400822 in func2 () at test/test.c:35 539 | #3 0x0000000000400833 in func1 () at test/test.c:37 540 | #4 0x000000000040085d in main () at test/test.c:42 541 | 542 | Breakpoint 6, func4 () at test/test.c:25 543 | 25 void func4(void) { func5(); } 544 | #0 func4 () at test/test.c:25 545 | #1 0x00000000004007d1 in func3 () at test/test.c:29 546 | #2 0x0000000000400822 in func2 () at test/test.c:35 547 | #3 0x0000000000400833 in func1 () at test/test.c:37 548 | #4 0x000000000040085d in main () at test/test.c:42 549 | 550 | Breakpoint 7, func5 () at test/test.c:21 551 | 21 func5_1("graph me\n"); 552 | #0 func5 () at test/test.c:21 553 | #1 0x0000000000400784 in func4 () at test/test.c:25 554 | #2 0x00000000004007d1 in func3 () at test/test.c:29 555 | #3 0x0000000000400822 in func2 () at test/test.c:35 556 | #4 0x0000000000400833 in func1 () at test/test.c:37 557 | #5 0x000000000040085d in main () at test/test.c:42 558 | 559 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 560 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 561 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 562 | #1 0x0000000000400773 in func5 () at test/test.c:21 563 | #2 0x0000000000400784 in func4 () at test/test.c:25 564 | #3 0x00000000004007d1 in func3 () at test/test.c:29 565 | #4 0x0000000000400822 in func2 () at test/test.c:35 566 | #5 0x0000000000400833 in func1 () at test/test.c:37 567 | #6 0x000000000040085d in main () at test/test.c:42 568 | 569 | Breakpoint 9, func6 () at test/test.c:17 570 | 17 void func6(void) { func7(); } 571 | #0 func6 () at test/test.c:17 572 | #1 0x0000000000400778 in func5 () at test/test.c:22 573 | #2 0x0000000000400784 in func4 () at test/test.c:25 574 | #3 0x00000000004007d1 in func3 () at test/test.c:29 575 | #4 0x0000000000400822 in func2 () at test/test.c:35 576 | #5 0x0000000000400833 in func1 () at test/test.c:37 577 | #6 0x000000000040085d in main () at test/test.c:42 578 | 579 | Breakpoint 10, func7 () at test/test.c:11 580 | 11 void func7(void) { 581 | #0 func7 () at test/test.c:11 582 | #1 0x000000000040073d in func6 () at test/test.c:17 583 | #2 0x0000000000400778 in func5 () at test/test.c:22 584 | #3 0x0000000000400784 in func4 () at test/test.c:25 585 | #4 0x00000000004007d1 in func3 () at test/test.c:29 586 | #5 0x0000000000400822 in func2 () at test/test.c:35 587 | #6 0x0000000000400833 in func1 () at test/test.c:37 588 | #7 0x000000000040085d in main () at test/test.c:42 589 | 590 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 591 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 592 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 593 | #1 0x0000000000400718 in func7 () at test/test.c:13 594 | #2 0x000000000040073d in func6 () at test/test.c:17 595 | #3 0x0000000000400778 in func5 () at test/test.c:22 596 | #4 0x0000000000400784 in func4 () at test/test.c:25 597 | #5 0x00000000004007d1 in func3 () at test/test.c:29 598 | #6 0x0000000000400822 in func2 () at test/test.c:35 599 | #7 0x0000000000400833 in func1 () at test/test.c:37 600 | #8 0x000000000040085d in main () at test/test.c:42 601 | 602 | Breakpoint 12, func8 () at test/test.c:8 603 | 8 void func8(void) { func9(); } 604 | #0 func8 () at test/test.c:8 605 | #1 0x000000000040071d in func7 () at test/test.c:14 606 | #2 0x000000000040073d in func6 () at test/test.c:17 607 | #3 0x0000000000400778 in func5 () at test/test.c:22 608 | #4 0x0000000000400784 in func4 () at test/test.c:25 609 | #5 0x00000000004007d1 in func3 () at test/test.c:29 610 | #6 0x0000000000400822 in func2 () at test/test.c:35 611 | #7 0x0000000000400833 in func1 () at test/test.c:37 612 | #8 0x000000000040085d in main () at test/test.c:42 613 | 614 | Breakpoint 14, func9 () at test/test.c:7 615 | 7 static void func9(void) { printf("leaf\n"); } 616 | #0 func9 () at test/test.c:7 617 | #1 0x00000000004006c0 in func8 () at test/test.c:8 618 | #2 0x000000000040071d in func7 () at test/test.c:14 619 | #3 0x000000000040073d in func6 () at test/test.c:17 620 | #4 0x0000000000400778 in func5 () at test/test.c:22 621 | #5 0x0000000000400784 in func4 () at test/test.c:25 622 | #6 0x00000000004007d1 in func3 () at test/test.c:29 623 | #7 0x0000000000400822 in func2 () at test/test.c:35 624 | #8 0x0000000000400833 in func1 () at test/test.c:37 625 | #9 0x000000000040085d in main () at test/test.c:42 626 | 627 | Breakpoint 1, func1 () at test/test.c:37 628 | 37 void func1(void) { func2(); } 629 | #0 func1 () at test/test.c:37 630 | #1 0x000000000040085d in main () at test/test.c:42 631 | 632 | Breakpoint 2, func2 () at test/test.c:34 633 | 34 func2_1(rand(),rand()); 634 | #0 func2 () at test/test.c:34 635 | #1 0x0000000000400833 in func1 () at test/test.c:37 636 | #2 0x000000000040085d in main () at test/test.c:42 637 | 638 | Breakpoint 3, func2_1 (a=538196837, b=678638361) at test/test.c:32 639 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 640 | #0 func2_1 (a=538196837, b=678638361) at test/test.c:32 641 | #1 0x000000000040081d in func2 () at test/test.c:34 642 | #2 0x0000000000400833 in func1 () at test/test.c:37 643 | #3 0x000000000040085d in main () at test/test.c:42 644 | 645 | Breakpoint 4, func3 () at test/test.c:28 646 | 28 func3_1(rand(), rand(), rand()); 647 | #0 func3 () at test/test.c:28 648 | #1 0x0000000000400822 in func2 () at test/test.c:35 649 | #2 0x0000000000400833 in func1 () at test/test.c:37 650 | #3 0x000000000040085d in main () at test/test.c:42 651 | 652 | Breakpoint 5, func3_1 (a=2131991065, b=488300523, c=788802277) at test/test.c:26 653 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 654 | #0 func3_1 (a=2131991065, b=488300523, c=788802277) at test/test.c:26 655 | #1 0x00000000004007cc in func3 () at test/test.c:28 656 | #2 0x0000000000400822 in func2 () at test/test.c:35 657 | #3 0x0000000000400833 in func1 () at test/test.c:37 658 | #4 0x000000000040085d in main () at test/test.c:42 659 | 660 | Breakpoint 6, func4 () at test/test.c:25 661 | 25 void func4(void) { func5(); } 662 | #0 func4 () at test/test.c:25 663 | #1 0x00000000004007d1 in func3 () at test/test.c:29 664 | #2 0x0000000000400822 in func2 () at test/test.c:35 665 | #3 0x0000000000400833 in func1 () at test/test.c:37 666 | #4 0x000000000040085d in main () at test/test.c:42 667 | 668 | Breakpoint 7, func5 () at test/test.c:21 669 | 21 func5_1("graph me\n"); 670 | #0 func5 () at test/test.c:21 671 | #1 0x0000000000400784 in func4 () at test/test.c:25 672 | #2 0x00000000004007d1 in func3 () at test/test.c:29 673 | #3 0x0000000000400822 in func2 () at test/test.c:35 674 | #4 0x0000000000400833 in func1 () at test/test.c:37 675 | #5 0x000000000040085d in main () at test/test.c:42 676 | 677 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 678 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 679 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 680 | #1 0x0000000000400773 in func5 () at test/test.c:21 681 | #2 0x0000000000400784 in func4 () at test/test.c:25 682 | #3 0x00000000004007d1 in func3 () at test/test.c:29 683 | #4 0x0000000000400822 in func2 () at test/test.c:35 684 | #5 0x0000000000400833 in func1 () at test/test.c:37 685 | #6 0x000000000040085d in main () at test/test.c:42 686 | 687 | Breakpoint 9, func6 () at test/test.c:17 688 | 17 void func6(void) { func7(); } 689 | #0 func6 () at test/test.c:17 690 | #1 0x0000000000400778 in func5 () at test/test.c:22 691 | #2 0x0000000000400784 in func4 () at test/test.c:25 692 | #3 0x00000000004007d1 in func3 () at test/test.c:29 693 | #4 0x0000000000400822 in func2 () at test/test.c:35 694 | #5 0x0000000000400833 in func1 () at test/test.c:37 695 | #6 0x000000000040085d in main () at test/test.c:42 696 | 697 | Breakpoint 10, func7 () at test/test.c:11 698 | 11 void func7(void) { 699 | #0 func7 () at test/test.c:11 700 | #1 0x000000000040073d in func6 () at test/test.c:17 701 | #2 0x0000000000400778 in func5 () at test/test.c:22 702 | #3 0x0000000000400784 in func4 () at test/test.c:25 703 | #4 0x00000000004007d1 in func3 () at test/test.c:29 704 | #5 0x0000000000400822 in func2 () at test/test.c:35 705 | #6 0x0000000000400833 in func1 () at test/test.c:37 706 | #7 0x000000000040085d in main () at test/test.c:42 707 | 708 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 709 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 710 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 711 | #1 0x0000000000400718 in func7 () at test/test.c:13 712 | #2 0x000000000040073d in func6 () at test/test.c:17 713 | #3 0x0000000000400778 in func5 () at test/test.c:22 714 | #4 0x0000000000400784 in func4 () at test/test.c:25 715 | #5 0x00000000004007d1 in func3 () at test/test.c:29 716 | #6 0x0000000000400822 in func2 () at test/test.c:35 717 | #7 0x0000000000400833 in func1 () at test/test.c:37 718 | #8 0x000000000040085d in main () at test/test.c:42 719 | 720 | Breakpoint 12, func8 () at test/test.c:8 721 | 8 void func8(void) { func9(); } 722 | #0 func8 () at test/test.c:8 723 | #1 0x000000000040071d in func7 () at test/test.c:14 724 | #2 0x000000000040073d in func6 () at test/test.c:17 725 | #3 0x0000000000400778 in func5 () at test/test.c:22 726 | #4 0x0000000000400784 in func4 () at test/test.c:25 727 | #5 0x00000000004007d1 in func3 () at test/test.c:29 728 | #6 0x0000000000400822 in func2 () at test/test.c:35 729 | #7 0x0000000000400833 in func1 () at test/test.c:37 730 | #8 0x000000000040085d in main () at test/test.c:42 731 | 732 | Breakpoint 14, func9 () at test/test.c:7 733 | 7 static void func9(void) { printf("leaf\n"); } 734 | #0 func9 () at test/test.c:7 735 | #1 0x00000000004006c0 in func8 () at test/test.c:8 736 | #2 0x000000000040071d in func7 () at test/test.c:14 737 | #3 0x000000000040073d in func6 () at test/test.c:17 738 | #4 0x0000000000400778 in func5 () at test/test.c:22 739 | #5 0x0000000000400784 in func4 () at test/test.c:25 740 | #6 0x00000000004007d1 in func3 () at test/test.c:29 741 | #7 0x0000000000400822 in func2 () at test/test.c:35 742 | #8 0x0000000000400833 in func1 () at test/test.c:37 743 | #9 0x000000000040085d in main () at test/test.c:42 744 | 745 | Breakpoint 1, func1 () at test/test.c:37 746 | 37 void func1(void) { func2(); } 747 | #0 func1 () at test/test.c:37 748 | #1 0x000000000040085d in main () at test/test.c:42 749 | 750 | Breakpoint 2, func2 () at test/test.c:34 751 | 34 func2_1(rand(),rand()); 752 | #0 func2 () at test/test.c:34 753 | #1 0x0000000000400833 in func1 () at test/test.c:37 754 | #2 0x000000000040085d in main () at test/test.c:42 755 | 756 | Breakpoint 3, func2_1 (a=1194238441, b=836180103) at test/test.c:32 757 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 758 | #0 func2_1 (a=1194238441, b=836180103) at test/test.c:32 759 | #1 0x000000000040081d in func2 () at test/test.c:34 760 | #2 0x0000000000400833 in func1 () at test/test.c:37 761 | #3 0x000000000040085d in main () at test/test.c:42 762 | 763 | Breakpoint 4, func3 () at test/test.c:28 764 | 28 func3_1(rand(), rand(), rand()); 765 | #0 func3 () at test/test.c:28 766 | #1 0x0000000000400822 in func2 () at test/test.c:35 767 | #2 0x0000000000400833 in func1 () at test/test.c:37 768 | #3 0x000000000040085d in main () at test/test.c:42 769 | 770 | Breakpoint 5, func3_1 (a=1899483066, b=1774678849, c=1780754063) at test/test.c:26 771 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 772 | #0 func3_1 (a=1899483066, b=1774678849, c=1780754063) at test/test.c:26 773 | #1 0x00000000004007cc in func3 () at test/test.c:28 774 | #2 0x0000000000400822 in func2 () at test/test.c:35 775 | #3 0x0000000000400833 in func1 () at test/test.c:37 776 | #4 0x000000000040085d in main () at test/test.c:42 777 | 778 | Breakpoint 6, func4 () at test/test.c:25 779 | 25 void func4(void) { func5(); } 780 | #0 func4 () at test/test.c:25 781 | #1 0x00000000004007d1 in func3 () at test/test.c:29 782 | #2 0x0000000000400822 in func2 () at test/test.c:35 783 | #3 0x0000000000400833 in func1 () at test/test.c:37 784 | #4 0x000000000040085d in main () at test/test.c:42 785 | 786 | Breakpoint 7, func5 () at test/test.c:21 787 | 21 func5_1("graph me\n"); 788 | #0 func5 () at test/test.c:21 789 | #1 0x0000000000400784 in func4 () at test/test.c:25 790 | #2 0x00000000004007d1 in func3 () at test/test.c:29 791 | #3 0x0000000000400822 in func2 () at test/test.c:35 792 | #4 0x0000000000400833 in func1 () at test/test.c:37 793 | #5 0x000000000040085d in main () at test/test.c:42 794 | 795 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 796 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 797 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 798 | #1 0x0000000000400773 in func5 () at test/test.c:21 799 | #2 0x0000000000400784 in func4 () at test/test.c:25 800 | #3 0x00000000004007d1 in func3 () at test/test.c:29 801 | #4 0x0000000000400822 in func2 () at test/test.c:35 802 | #5 0x0000000000400833 in func1 () at test/test.c:37 803 | #6 0x000000000040085d in main () at test/test.c:42 804 | 805 | Breakpoint 9, func6 () at test/test.c:17 806 | 17 void func6(void) { func7(); } 807 | #0 func6 () at test/test.c:17 808 | #1 0x0000000000400778 in func5 () at test/test.c:22 809 | #2 0x0000000000400784 in func4 () at test/test.c:25 810 | #3 0x00000000004007d1 in func3 () at test/test.c:29 811 | #4 0x0000000000400822 in func2 () at test/test.c:35 812 | #5 0x0000000000400833 in func1 () at test/test.c:37 813 | #6 0x000000000040085d in main () at test/test.c:42 814 | 815 | Breakpoint 10, func7 () at test/test.c:11 816 | 11 void func7(void) { 817 | #0 func7 () at test/test.c:11 818 | #1 0x000000000040073d in func6 () at test/test.c:17 819 | #2 0x0000000000400778 in func5 () at test/test.c:22 820 | #3 0x0000000000400784 in func4 () at test/test.c:25 821 | #4 0x00000000004007d1 in func3 () at test/test.c:29 822 | #5 0x0000000000400822 in func2 () at test/test.c:35 823 | #6 0x0000000000400833 in func1 () at test/test.c:37 824 | #7 0x000000000040085d in main () at test/test.c:42 825 | 826 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 827 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 828 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 829 | #1 0x0000000000400718 in func7 () at test/test.c:13 830 | #2 0x000000000040073d in func6 () at test/test.c:17 831 | #3 0x0000000000400778 in func5 () at test/test.c:22 832 | #4 0x0000000000400784 in func4 () at test/test.c:25 833 | #5 0x00000000004007d1 in func3 () at test/test.c:29 834 | #6 0x0000000000400822 in func2 () at test/test.c:35 835 | #7 0x0000000000400833 in func1 () at test/test.c:37 836 | #8 0x000000000040085d in main () at test/test.c:42 837 | 838 | Breakpoint 12, func8 () at test/test.c:8 839 | 8 void func8(void) { func9(); } 840 | #0 func8 () at test/test.c:8 841 | #1 0x000000000040071d in func7 () at test/test.c:14 842 | #2 0x000000000040073d in func6 () at test/test.c:17 843 | #3 0x0000000000400778 in func5 () at test/test.c:22 844 | #4 0x0000000000400784 in func4 () at test/test.c:25 845 | #5 0x00000000004007d1 in func3 () at test/test.c:29 846 | #6 0x0000000000400822 in func2 () at test/test.c:35 847 | #7 0x0000000000400833 in func1 () at test/test.c:37 848 | #8 0x000000000040085d in main () at test/test.c:42 849 | 850 | Breakpoint 14, func9 () at test/test.c:7 851 | 7 static void func9(void) { printf("leaf\n"); } 852 | #0 func9 () at test/test.c:7 853 | #1 0x00000000004006c0 in func8 () at test/test.c:8 854 | #2 0x000000000040071d in func7 () at test/test.c:14 855 | #3 0x000000000040073d in func6 () at test/test.c:17 856 | #4 0x0000000000400778 in func5 () at test/test.c:22 857 | #5 0x0000000000400784 in func4 () at test/test.c:25 858 | #6 0x00000000004007d1 in func3 () at test/test.c:29 859 | #7 0x0000000000400822 in func2 () at test/test.c:35 860 | #8 0x0000000000400833 in func1 () at test/test.c:37 861 | #9 0x000000000040085d in main () at test/test.c:42 862 | 863 | Breakpoint 1, func1 () at test/test.c:37 864 | 37 void func1(void) { func2(); } 865 | #0 func1 () at test/test.c:37 866 | #1 0x000000000040085d in main () at test/test.c:42 867 | 868 | Breakpoint 2, func2 () at test/test.c:34 869 | 34 func2_1(rand(),rand()); 870 | #0 func2 () at test/test.c:34 871 | #1 0x0000000000400833 in func1 () at test/test.c:37 872 | #2 0x000000000040085d in main () at test/test.c:42 873 | 874 | Breakpoint 3, func2_1 (a=440678659, b=201451423) at test/test.c:32 875 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 876 | #0 func2_1 (a=440678659, b=201451423) at test/test.c:32 877 | #1 0x000000000040081d in func2 () at test/test.c:34 878 | #2 0x0000000000400833 in func1 () at test/test.c:37 879 | #3 0x000000000040085d in main () at test/test.c:42 880 | 881 | Breakpoint 4, func3 () at test/test.c:28 882 | 28 func3_1(rand(), rand(), rand()); 883 | #0 func3 () at test/test.c:28 884 | #1 0x0000000000400822 in func2 () at test/test.c:35 885 | #2 0x0000000000400833 in func1 () at test/test.c:37 886 | #3 0x000000000040085d in main () at test/test.c:42 887 | 888 | Breakpoint 5, func3_1 (a=846339160, b=260244155, c=120982836) at test/test.c:26 889 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 890 | #0 func3_1 (a=846339160, b=260244155, c=120982836) at test/test.c:26 891 | #1 0x00000000004007cc in func3 () at test/test.c:28 892 | #2 0x0000000000400822 in func2 () at test/test.c:35 893 | #3 0x0000000000400833 in func1 () at test/test.c:37 894 | #4 0x000000000040085d in main () at test/test.c:42 895 | 896 | Breakpoint 6, func4 () at test/test.c:25 897 | 25 void func4(void) { func5(); } 898 | #0 func4 () at test/test.c:25 899 | #1 0x00000000004007d1 in func3 () at test/test.c:29 900 | #2 0x0000000000400822 in func2 () at test/test.c:35 901 | #3 0x0000000000400833 in func1 () at test/test.c:37 902 | #4 0x000000000040085d in main () at test/test.c:42 903 | 904 | Breakpoint 7, func5 () at test/test.c:21 905 | 21 func5_1("graph me\n"); 906 | #0 func5 () at test/test.c:21 907 | #1 0x0000000000400784 in func4 () at test/test.c:25 908 | #2 0x00000000004007d1 in func3 () at test/test.c:29 909 | #3 0x0000000000400822 in func2 () at test/test.c:35 910 | #4 0x0000000000400833 in func1 () at test/test.c:37 911 | #5 0x000000000040085d in main () at test/test.c:42 912 | 913 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 914 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 915 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 916 | #1 0x0000000000400773 in func5 () at test/test.c:21 917 | #2 0x0000000000400784 in func4 () at test/test.c:25 918 | #3 0x00000000004007d1 in func3 () at test/test.c:29 919 | #4 0x0000000000400822 in func2 () at test/test.c:35 920 | #5 0x0000000000400833 in func1 () at test/test.c:37 921 | #6 0x000000000040085d in main () at test/test.c:42 922 | 923 | Breakpoint 9, func6 () at test/test.c:17 924 | 17 void func6(void) { func7(); } 925 | #0 func6 () at test/test.c:17 926 | #1 0x0000000000400778 in func5 () at test/test.c:22 927 | #2 0x0000000000400784 in func4 () at test/test.c:25 928 | #3 0x00000000004007d1 in func3 () at test/test.c:29 929 | #4 0x0000000000400822 in func2 () at test/test.c:35 930 | #5 0x0000000000400833 in func1 () at test/test.c:37 931 | #6 0x000000000040085d in main () at test/test.c:42 932 | 933 | Breakpoint 10, func7 () at test/test.c:11 934 | 11 void func7(void) { 935 | #0 func7 () at test/test.c:11 936 | #1 0x000000000040073d in func6 () at test/test.c:17 937 | #2 0x0000000000400778 in func5 () at test/test.c:22 938 | #3 0x0000000000400784 in func4 () at test/test.c:25 939 | #4 0x00000000004007d1 in func3 () at test/test.c:29 940 | #5 0x0000000000400822 in func2 () at test/test.c:35 941 | #6 0x0000000000400833 in func1 () at test/test.c:37 942 | #7 0x000000000040085d in main () at test/test.c:42 943 | 944 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 945 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 946 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 947 | #1 0x0000000000400718 in func7 () at test/test.c:13 948 | #2 0x000000000040073d in func6 () at test/test.c:17 949 | #3 0x0000000000400778 in func5 () at test/test.c:22 950 | #4 0x0000000000400784 in func4 () at test/test.c:25 951 | #5 0x00000000004007d1 in func3 () at test/test.c:29 952 | #6 0x0000000000400822 in func2 () at test/test.c:35 953 | #7 0x0000000000400833 in func1 () at test/test.c:37 954 | #8 0x000000000040085d in main () at test/test.c:42 955 | 956 | Breakpoint 12, func8 () at test/test.c:8 957 | 8 void func8(void) { func9(); } 958 | #0 func8 () at test/test.c:8 959 | #1 0x000000000040071d in func7 () at test/test.c:14 960 | #2 0x000000000040073d in func6 () at test/test.c:17 961 | #3 0x0000000000400778 in func5 () at test/test.c:22 962 | #4 0x0000000000400784 in func4 () at test/test.c:25 963 | #5 0x00000000004007d1 in func3 () at test/test.c:29 964 | #6 0x0000000000400822 in func2 () at test/test.c:35 965 | #7 0x0000000000400833 in func1 () at test/test.c:37 966 | #8 0x000000000040085d in main () at test/test.c:42 967 | 968 | Breakpoint 14, func9 () at test/test.c:7 969 | 7 static void func9(void) { printf("leaf\n"); } 970 | #0 func9 () at test/test.c:7 971 | #1 0x00000000004006c0 in func8 () at test/test.c:8 972 | #2 0x000000000040071d in func7 () at test/test.c:14 973 | #3 0x000000000040073d in func6 () at test/test.c:17 974 | #4 0x0000000000400778 in func5 () at test/test.c:22 975 | #5 0x0000000000400784 in func4 () at test/test.c:25 976 | #6 0x00000000004007d1 in func3 () at test/test.c:29 977 | #7 0x0000000000400822 in func2 () at test/test.c:35 978 | #8 0x0000000000400833 in func1 () at test/test.c:37 979 | #9 0x000000000040085d in main () at test/test.c:42 980 | 981 | Breakpoint 1, func1 () at test/test.c:37 982 | 37 void func1(void) { func2(); } 983 | #0 func1 () at test/test.c:37 984 | #1 0x000000000040085d in main () at test/test.c:42 985 | 986 | Breakpoint 2, func2 () at test/test.c:34 987 | 34 func2_1(rand(),rand()); 988 | #0 func2 () at test/test.c:34 989 | #1 0x0000000000400833 in func1 () at test/test.c:37 990 | #2 0x000000000040085d in main () at test/test.c:42 991 | 992 | Breakpoint 3, func2_1 (a=1189629667, b=840970814) at test/test.c:32 993 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 994 | #0 func2_1 (a=1189629667, b=840970814) at test/test.c:32 995 | #1 0x000000000040081d in func2 () at test/test.c:34 996 | #2 0x0000000000400833 in func1 () at test/test.c:37 997 | #3 0x000000000040085d in main () at test/test.c:42 998 | 999 | Breakpoint 4, func3 () at test/test.c:28 1000 | 28 func3_1(rand(), rand(), rand()); 1001 | #0 func3 () at test/test.c:28 1002 | #1 0x0000000000400822 in func2 () at test/test.c:35 1003 | #2 0x0000000000400833 in func1 () at test/test.c:37 1004 | #3 0x000000000040085d in main () at test/test.c:42 1005 | 1006 | Breakpoint 5, func3_1 (a=417356576, b=1734687082, c=1191404979) at test/test.c:26 1007 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 1008 | #0 func3_1 (a=417356576, b=1734687082, c=1191404979) at test/test.c:26 1009 | #1 0x00000000004007cc in func3 () at test/test.c:28 1010 | #2 0x0000000000400822 in func2 () at test/test.c:35 1011 | #3 0x0000000000400833 in func1 () at test/test.c:37 1012 | #4 0x000000000040085d in main () at test/test.c:42 1013 | 1014 | Breakpoint 6, func4 () at test/test.c:25 1015 | 25 void func4(void) { func5(); } 1016 | #0 func4 () at test/test.c:25 1017 | #1 0x00000000004007d1 in func3 () at test/test.c:29 1018 | #2 0x0000000000400822 in func2 () at test/test.c:35 1019 | #3 0x0000000000400833 in func1 () at test/test.c:37 1020 | #4 0x000000000040085d in main () at test/test.c:42 1021 | 1022 | Breakpoint 7, func5 () at test/test.c:21 1023 | 21 func5_1("graph me\n"); 1024 | #0 func5 () at test/test.c:21 1025 | #1 0x0000000000400784 in func4 () at test/test.c:25 1026 | #2 0x00000000004007d1 in func3 () at test/test.c:29 1027 | #3 0x0000000000400822 in func2 () at test/test.c:35 1028 | #4 0x0000000000400833 in func1 () at test/test.c:37 1029 | #5 0x000000000040085d in main () at test/test.c:42 1030 | 1031 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 1032 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 1033 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 1034 | #1 0x0000000000400773 in func5 () at test/test.c:21 1035 | #2 0x0000000000400784 in func4 () at test/test.c:25 1036 | #3 0x00000000004007d1 in func3 () at test/test.c:29 1037 | #4 0x0000000000400822 in func2 () at test/test.c:35 1038 | #5 0x0000000000400833 in func1 () at test/test.c:37 1039 | #6 0x000000000040085d in main () at test/test.c:42 1040 | 1041 | Breakpoint 9, func6 () at test/test.c:17 1042 | 17 void func6(void) { func7(); } 1043 | #0 func6 () at test/test.c:17 1044 | #1 0x0000000000400778 in func5 () at test/test.c:22 1045 | #2 0x0000000000400784 in func4 () at test/test.c:25 1046 | #3 0x00000000004007d1 in func3 () at test/test.c:29 1047 | #4 0x0000000000400822 in func2 () at test/test.c:35 1048 | #5 0x0000000000400833 in func1 () at test/test.c:37 1049 | #6 0x000000000040085d in main () at test/test.c:42 1050 | 1051 | Breakpoint 10, func7 () at test/test.c:11 1052 | 11 void func7(void) { 1053 | #0 func7 () at test/test.c:11 1054 | #1 0x000000000040073d in func6 () at test/test.c:17 1055 | #2 0x0000000000400778 in func5 () at test/test.c:22 1056 | #3 0x0000000000400784 in func4 () at test/test.c:25 1057 | #4 0x00000000004007d1 in func3 () at test/test.c:29 1058 | #5 0x0000000000400822 in func2 () at test/test.c:35 1059 | #6 0x0000000000400833 in func1 () at test/test.c:37 1060 | #7 0x000000000040085d in main () at test/test.c:42 1061 | 1062 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 1063 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 1064 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 1065 | #1 0x0000000000400718 in func7 () at test/test.c:13 1066 | #2 0x000000000040073d in func6 () at test/test.c:17 1067 | #3 0x0000000000400778 in func5 () at test/test.c:22 1068 | #4 0x0000000000400784 in func4 () at test/test.c:25 1069 | #5 0x00000000004007d1 in func3 () at test/test.c:29 1070 | #6 0x0000000000400822 in func2 () at test/test.c:35 1071 | #7 0x0000000000400833 in func1 () at test/test.c:37 1072 | #8 0x000000000040085d in main () at test/test.c:42 1073 | 1074 | Breakpoint 12, func8 () at test/test.c:8 1075 | 8 void func8(void) { func9(); } 1076 | #0 func8 () at test/test.c:8 1077 | #1 0x000000000040071d in func7 () at test/test.c:14 1078 | #2 0x000000000040073d in func6 () at test/test.c:17 1079 | #3 0x0000000000400778 in func5 () at test/test.c:22 1080 | #4 0x0000000000400784 in func4 () at test/test.c:25 1081 | #5 0x00000000004007d1 in func3 () at test/test.c:29 1082 | #6 0x0000000000400822 in func2 () at test/test.c:35 1083 | #7 0x0000000000400833 in func1 () at test/test.c:37 1084 | #8 0x000000000040085d in main () at test/test.c:42 1085 | 1086 | Breakpoint 14, func9 () at test/test.c:7 1087 | 7 static void func9(void) { printf("leaf\n"); } 1088 | #0 func9 () at test/test.c:7 1089 | #1 0x00000000004006c0 in func8 () at test/test.c:8 1090 | #2 0x000000000040071d in func7 () at test/test.c:14 1091 | #3 0x000000000040073d in func6 () at test/test.c:17 1092 | #4 0x0000000000400778 in func5 () at test/test.c:22 1093 | #5 0x0000000000400784 in func4 () at test/test.c:25 1094 | #6 0x00000000004007d1 in func3 () at test/test.c:29 1095 | #7 0x0000000000400822 in func2 () at test/test.c:35 1096 | #8 0x0000000000400833 in func1 () at test/test.c:37 1097 | #9 0x000000000040085d in main () at test/test.c:42 1098 | 1099 | Breakpoint 1, func1 () at test/test.c:37 1100 | 37 void func1(void) { func2(); } 1101 | #0 func1 () at test/test.c:37 1102 | #1 0x000000000040085d in main () at test/test.c:42 1103 | 1104 | Breakpoint 2, func2 () at test/test.c:34 1105 | 34 func2_1(rand(),rand()); 1106 | #0 func2 () at test/test.c:34 1107 | #1 0x0000000000400833 in func1 () at test/test.c:37 1108 | #2 0x000000000040085d in main () at test/test.c:42 1109 | 1110 | Breakpoint 3, func2_1 (a=832042838, b=1622898743) at test/test.c:32 1111 | 32 void func2_1(int a, int b) { printf("leaf (%d, %d)\n", a, b);} 1112 | #0 func2_1 (a=832042838, b=1622898743) at test/test.c:32 1113 | #1 0x000000000040081d in func2 () at test/test.c:34 1114 | #2 0x0000000000400833 in func1 () at test/test.c:37 1115 | #3 0x000000000040085d in main () at test/test.c:42 1116 | 1117 | Breakpoint 4, func3 () at test/test.c:28 1118 | 28 func3_1(rand(), rand(), rand()); 1119 | #0 func3 () at test/test.c:28 1120 | #1 0x0000000000400822 in func2 () at test/test.c:35 1121 | #2 0x0000000000400833 in func1 () at test/test.c:37 1122 | #3 0x000000000040085d in main () at test/test.c:42 1123 | 1124 | Breakpoint 5, func3_1 (a=1377131099, b=1609716117, c=1617229151) at test/test.c:26 1125 | 26 void func3_1(int a, int b, int c) { printf("leaf\n"); } 1126 | #0 func3_1 (a=1377131099, b=1609716117, c=1617229151) at test/test.c:26 1127 | #1 0x00000000004007cc in func3 () at test/test.c:28 1128 | #2 0x0000000000400822 in func2 () at test/test.c:35 1129 | #3 0x0000000000400833 in func1 () at test/test.c:37 1130 | #4 0x000000000040085d in main () at test/test.c:42 1131 | 1132 | Breakpoint 6, func4 () at test/test.c:25 1133 | 25 void func4(void) { func5(); } 1134 | #0 func4 () at test/test.c:25 1135 | #1 0x00000000004007d1 in func3 () at test/test.c:29 1136 | #2 0x0000000000400822 in func2 () at test/test.c:35 1137 | #3 0x0000000000400833 in func1 () at test/test.c:37 1138 | #4 0x000000000040085d in main () at test/test.c:42 1139 | 1140 | Breakpoint 7, func5 () at test/test.c:21 1141 | 21 func5_1("graph me\n"); 1142 | #0 func5 () at test/test.c:21 1143 | #1 0x0000000000400784 in func4 () at test/test.c:25 1144 | #2 0x00000000004007d1 in func3 () at test/test.c:29 1145 | #3 0x0000000000400822 in func2 () at test/test.c:35 1146 | #4 0x0000000000400833 in func1 () at test/test.c:37 1147 | #5 0x000000000040085d in main () at test/test.c:42 1148 | 1149 | Breakpoint 8, func5_1 (str=0x40091e "graph me\n") at test/test.c:19 1150 | 19 void func5_1(const char* str) { printf("leaf (%s)\n", str); } 1151 | #0 func5_1 (str=0x40091e "graph me\n") at test/test.c:19 1152 | #1 0x0000000000400773 in func5 () at test/test.c:21 1153 | #2 0x0000000000400784 in func4 () at test/test.c:25 1154 | #3 0x00000000004007d1 in func3 () at test/test.c:29 1155 | #4 0x0000000000400822 in func2 () at test/test.c:35 1156 | #5 0x0000000000400833 in func1 () at test/test.c:37 1157 | #6 0x000000000040085d in main () at test/test.c:42 1158 | 1159 | Breakpoint 9, func6 () at test/test.c:17 1160 | 17 void func6(void) { func7(); } 1161 | #0 func6 () at test/test.c:17 1162 | #1 0x0000000000400778 in func5 () at test/test.c:22 1163 | #2 0x0000000000400784 in func4 () at test/test.c:25 1164 | #3 0x00000000004007d1 in func3 () at test/test.c:29 1165 | #4 0x0000000000400822 in func2 () at test/test.c:35 1166 | #5 0x0000000000400833 in func1 () at test/test.c:37 1167 | #6 0x000000000040085d in main () at test/test.c:42 1168 | 1169 | Breakpoint 10, func7 () at test/test.c:11 1170 | 11 void func7(void) { 1171 | #0 func7 () at test/test.c:11 1172 | #1 0x000000000040073d in func6 () at test/test.c:17 1173 | #2 0x0000000000400778 in func5 () at test/test.c:22 1174 | #3 0x0000000000400784 in func4 () at test/test.c:25 1175 | #4 0x00000000004007d1 in func3 () at test/test.c:29 1176 | #5 0x0000000000400822 in func2 () at test/test.c:35 1177 | #6 0x0000000000400833 in func1 () at test/test.c:37 1178 | #7 0x000000000040085d in main () at test/test.c:42 1179 | 1180 | Breakpoint 11, func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 1181 | 10 void func7_1(bool is_true, int *p) { printf("leaf (is_true=%d, ptr=%p\n", is_true, p); } 1182 | #0 func7_1 (is_true=false, p=0x7fffffffe794) at test/test.c:10 1183 | #1 0x0000000000400718 in func7 () at test/test.c:13 1184 | #2 0x000000000040073d in func6 () at test/test.c:17 1185 | #3 0x0000000000400778 in func5 () at test/test.c:22 1186 | #4 0x0000000000400784 in func4 () at test/test.c:25 1187 | #5 0x00000000004007d1 in func3 () at test/test.c:29 1188 | #6 0x0000000000400822 in func2 () at test/test.c:35 1189 | #7 0x0000000000400833 in func1 () at test/test.c:37 1190 | #8 0x000000000040085d in main () at test/test.c:42 1191 | 1192 | Breakpoint 12, func8 () at test/test.c:8 1193 | 8 void func8(void) { func9(); } 1194 | #0 func8 () at test/test.c:8 1195 | #1 0x000000000040071d in func7 () at test/test.c:14 1196 | #2 0x000000000040073d in func6 () at test/test.c:17 1197 | #3 0x0000000000400778 in func5 () at test/test.c:22 1198 | #4 0x0000000000400784 in func4 () at test/test.c:25 1199 | #5 0x00000000004007d1 in func3 () at test/test.c:29 1200 | #6 0x0000000000400822 in func2 () at test/test.c:35 1201 | #7 0x0000000000400833 in func1 () at test/test.c:37 1202 | #8 0x000000000040085d in main () at test/test.c:42 1203 | 1204 | Breakpoint 14, func9 () at test/test.c:7 1205 | 7 static void func9(void) { printf("leaf\n"); } 1206 | #0 func9 () at test/test.c:7 1207 | #1 0x00000000004006c0 in func8 () at test/test.c:8 1208 | #2 0x000000000040071d in func7 () at test/test.c:14 1209 | #3 0x000000000040073d in func6 () at test/test.c:17 1210 | #4 0x0000000000400778 in func5 () at test/test.c:22 1211 | #5 0x0000000000400784 in func4 () at test/test.c:25 1212 | #6 0x00000000004007d1 in func3 () at test/test.c:29 1213 | #7 0x0000000000400822 in func2 () at test/test.c:35 1214 | #8 0x0000000000400833 in func1 () at test/test.c:37 1215 | #9 0x000000000040085d in main () at test/test.c:42 1216 | [Inferior 1 (process 16015) exited normally] 1217 | --------------------------------------------------------------------------------