---
name: "dwarf_srclines"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/dwarf_srclines"
---

# dwarf\_srclines(3)

retrieve line number information for a debugging information entry

## NAME

**dwarf\_srclines** – retrieve line number information for a debugging information entry

## LIBRARY

library “libdwarf”

## SYNOPSIS

**#include \<libdwarf.h\>**

*int*\

**dwarf\_srclines**(*Dwarf\_Die die*, *Dwarf\_Line \*\*lines*, *Dwarf\_Signed \*nlines*, *Dwarf\_Error \*err*);

## DESCRIPTION

Function **dwarf\_srclines**() returns line number information associated with a compilation unit. Line number information is returned as an array of *Dwarf\_Line* descriptors.

Argument *die* should reference a DWARF debugging information entry descriptor with line number information, see [dwarf(3)](/dwarf/3.md). Argument *lines* should point to a location that will hold a pointer to the returned array of *Dwarf\_Line* descriptors. Argument *nlines* should point to a location that will hold the number of descriptors returned. If argument *err* is not NULL, it will be used to store error information in case of an error.

The returned *Dwarf\_Line* descriptors may be passed to the other line number functions in the API set to retrieve specific information about each source line.

### Memory Management

The memory area used for the array of *Dwarf\_Line* descriptors returned in argument *lines* is owned by the library “libdwarf”. The application should not attempt to free this pointer. Portable code should instead use **dwarf\_srclines\_dealloc**() to indicate that the memory may be freed.

## RETURN VALUES

Function **dwarf\_srclines**() returns DW\_DLV\_OK when it succeeds. In case of an error, it returns DW\_DLV\_ERROR and sets the argument *err*.

## EXAMPLES

To obtain an array of *Dwarf\_Line* descriptors and to retrieve the source file, line number, and virtual address associated with each descriptor:

```
int n;
Dwarf_Die die;
Dwarf_Error de;
char *filename;
Dwarf_Line *lines;
Dwarf_Signed nlines;
Dwarf_Addr lineaddr;
Dwarf_Unsigned lineno;
/* variable "die" should reference a DIE for a compilation unit */
if (dwarf_srclines(die, &lines, &nlines, &de) != DW_DLV_OK)
	errx(EXIT_FAILURE, "dwarf_srclines: %s", dwarf_errmsg(de));
for (n = 0; n < nlines; n++) {
	/* Retrieve the file name for this descriptor. */
	if (dwarf_linesrc(lines[n], &filename, &de))
		errx(EXIT_FAILURE, "dwarf_linesrc: %s",
		    dwarf_errmsg(de));
	/* Retrieve the line number in the source file. */
	if (dwarf_lineno(lines[n], &lineno, &de))
		errx(EXIT_FAILURE, "dwarf_lineno: %s",
		    dwarf_errmsg(de));
	/* Retrieve the virtual address for this line. */
	if (dwarf_lineaddr(lines[n], &lineaddr, &de))
		errx(EXIT_FAILURE, "dwarf_lineaddr: %s",
		    dwarf_errmsg(de));
	}
```

## ERRORS

Function **dwarf\_srclines**() can fail with:

- \[DW\_DLE\_ARGUMENT\]

  One of the arguments *die*, *lines* or *nlines* was NULL.

- \[DW\_DLE\_NO\_ENTRY\]

  The compilation unit referenced by argument *die* does not have associated line number information.

- \[DW\_DLE\_MEMORY\]

  An out of memory condition was encountered during the execution of this function.

## SEE ALSO

[dwarf(3)](/dwarf/3.md), [dwarf\_line\_srcfileno(3)](/dwarf_line_srcfileno/3.md), [dwarf\_lineaddr(3)](/dwarf_lineaddr/3.md), [dwarf\_linebeginstatement(3)](/dwarf_linebeginstatement/3.md), [dwarf\_lineblock(3)](/dwarf_lineblock/3.md), [dwarf\_lineendsequence(3)](/dwarf_lineendsequence/3.md), [dwarf\_lineno(3)](/dwarf_lineno/3.md), [dwarf\_lineoff(3)](/dwarf_lineoff/3.md), [dwarf\_linesrc(3)](/dwarf_linesrc/3.md), [dwarf\_srcfiles(3)](/dwarf_srcfiles/3.md), [dwarf\_srclines\_dealloc(3)](/dwarf_srclines_dealloc/3.md)
